Domanda

Voglio caricare i dati (un array di stringhe) dalla vista padre in una serie di UITextFields nella vista figlio con presentando la modalView.

So come passare da bambino a genitori, e sono sicuro che è ancora più facile per andare nella direzione opposta, ma non so come.

UPDATE: Aggiornamento rimosso perché ho trovato il problema (doppio rilascio di vista modale)

È stato utile?

Soluzione

Eseguire l'override del metodo init per il controller di vista del bambino.

- (id) initWithStrings:(NSArray *)string {
    if (self = [super init]) {
        // Do stuff....
    }
    return self;
}

Poi nel genitore:

MyChildViewController *vc = [[[MyChildViewController alloc] initWithStrings: strings] autorelease];

Altri suggerimenti

Due modi si potrebbe fare:

1.Override il metodo init nome Matt suggerisce

campi 2.Creare nella classe del bambino e passare i valori al campo di testo.

@interface ChildViewController : UIViewController{
    NSArray *strings;
    UITextfield *textField1;
    UITextfield *textField2;
}
...

- (void)viewDidLoad {
    [super viewDidLoad];
    textField1.text = [strings objectAtIndex:0];
    textField2.text = [strings objectAtIndex:1];
}

Poi nella classe padre:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    ChildViewController *childController = [[ChildViewController alloc] init];
    childController.strings = your_array_of_strings;
    [self.navigationController pushViewController:childController animated:YES];
    [childController release];

}
- (id)initWithDataObject:(YourDataObjectClass *)dataObject {
    if (self = [super init]) {
        self.dataObject = dataObject;
        // now you can do stuff like: self.myString = self.dataObject.someString;
        // you could do stuff like that here or if it is related to view-stuff in viewDidLoad
    }
    return self;
}

Se si desidera ottenere veramente fantasia, è possibile effettuare un delegato per la vista del bambino.

@protocol MyChildViewDelegate
- (NSArray*)getStringsForMyChildView:(MyChildView*)childView;
@end

@interface MyChildView : UIView
{
    id <MyChildViewDelegate> delegate;
    ...
}

@property (nonatomic, assign) id <MyChildViewDelegate> delegate;
...
@end

Poi, da qualche parte nella vista si dovrebbe chiedere per le stringhe:

- (void)viewDidLoad
{
    ...
    NSArray* strings = [delegate getStringsForMyChildView:self];
    ...
}

Poi nel controller (o dove mai) si può fare:

myChildView = [[MyChildView alloc] initWith....];
myChildView.delegate = self;

...

- (NSArray*)getStringsForMyChildView:(MyChildView*)childView
{
    return [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
}

E 'probabilmente un po' eccessivo, in questo caso, ma questo è il modo UITableViews farlo troppo:. Hanno un delegato fonte di dati per fornire loro con il loro contenuto

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top