2013-08-08 9 views
11

Ho un campo di testo nel mio ViewController1. Ho un push seguito al mio ViewController2 che ha anche un campo di testo. Ho bisogno di impostare textField.text nel mio ViewController2 per essere uguale al testo nel campo testo nel mio ViewController1. Ecco il codice che ho:Imposta la proprietà di testo UITextField in prepareForSegue

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqual:@"ViewController2"]) 
    { 
     ViewController2 *VCT = [segue destinationViewController]; 
     VCT.title = @"View Controller #2"; 
     VCT.textField.text = self.textField.text; 
    } 
} 

Il setter funziona perfettamente. Perché il campo testo non funziona?

+0

NSLog self.textField.text –

risposta

22

Non è possibile impostare il testo del UITextField (e tutti gli altri componenti come UILabel e UITextView) nel preparare la segue, perché tutti i componenti vista del regolatore recentemente stanziato non sono ancora inizializzati (in questo momento, sono tutti nil), saranno solo quando viene presentato viewController (e la sua vista è caricata).

È necessario creare una proprietà NSString nel viewController presentato e quindi, da qualche parte all'interno di un altro controller di visualizzazione, ad esempio viewDidLoad, impostare il testo del campo di testo come valore di questa proprietà.

Ti piace questa:

Nel viewController che presenterà l'altro viewController:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"ViewController2"]) 
    { 
     ViewController2 *vc2 = [segue destinationViewController]; 
     vc2.myString = self.textField.text; 
    } 
} 

E dentro la viewController presentato:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    (...) 
    self.textField.text = self.myString; 
} 
+3

Infine !! La ringrazio per la risposta. –

0

Controllare e vedere se "VCT.textField" non è nullo in quel punto. Sospetto che scoprirai che è nulla.

È necessario esporlo tramite "@property (strong) IBOutlet UITextField * textField" oppure è necessario memorizzare la stringa da qualche altra parte (ad esempio una "NSString" proprietà?) Che quindi carica il campo di testo quando la vista è completamente caricata.