Come passare i dati da vista padre a figlio all'apertura?
-
27-09-2019 - |
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)
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