2013-08-08 11 views
11

Mam textField w moim ViewController1. Mam push pushue do mojego ViewController2, który również ma textField. Potrzebuję ustawić textField.text w moim ViewController2, aby był równy tekstowi w textField w moim ViewController1. Oto kod, który mam:Ustaw właściwość tekstu UITextField w 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; 
    } 
} 

Ustawiacz tytułu działa dobrze. Dlaczego pole tekstowe nie działa?

+0

NSLog self.textField.text –

Odpowiedz

22

Nie można ustawić tekst UITextField (i jakiekolwiek inne składniki, takie jak UILabel i UITextView) W celu przygotowania się do segue, ponieważ wszystkie komponenty widok na niedawno przydzielonego regulatora nie są jeszcze zainicjowana (w tym czasie, wszystkie są nil), będą one widoczne tylko wtedy, gdy zostanie wyświetlony element viewController (i załadowany widok).

Musisz utworzyć właściwość NSString w przedstawionym kontrolerze viewController, a następnie, gdzieś w swoim kontrolerze widoku, takim jak viewDidLoad, ustaw tekst textField jako wartość tej właściwości.

Jak to:

W viewController który zaprezentuje kolejną viewController:

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

i wewnątrz prezentowanego viewController:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

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

Wreszcie !! Dziękuję za Twoją odpowiedź. –

0

Sprawdź i sprawdź, czy "VCT.textField" nie ma w tym punkcie wartości zerowej. Podejrzewam, że okaże się, że jest zero.

Musisz wystawić go przez "@property (strong) IBOutlet UITextField * textField" lub musisz przechowywać ciąg gdzieś indziej (np. "NSString" właściwość?), Który następnie ładuje pole tekstowe, gdy widok jest w pełni załadowany.

Powiązane problemy