2013-08-08 14 views
11

Ich habe ein TextField in meinem ViewController1. Ich habe einen Push-Übergang zu meinem ViewController2, der auch ein textField hat. Ich muss den textField.text in meinem ViewController2 so einstellen, dass er dem Text im textField in meinem ViewController1 entspricht. Hier ist der Code, den ich habe:Setzen UITextField Text-Eigenschaft 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; 
    } 
} 

Der Titeleinsteller funktioniert gut. Warum funktioniert das TextField nicht?

+0

NSLog self.textField.text –

Antwort

22

Sie können nicht für segue den Text des UITextField (und alle anderen Komponenten wie UILabel und UITextView) in der Vorbereitung gesetzt, da alle Ansicht Komponenten der kürzlich zugewiesenen Controller noch nicht initialisiert werden (zu diesem Zeitpunkt sind sie alle nil), werden sie nur sein, wenn der viewController präsentiert wird (und seine Ansicht geladen ist).

Sie müssen eine NSString -Eigenschaft im dargestellten viewController erstellen und dann irgendwo innerhalb Ihres anderen View-Controllers, wie viewDidLoad, den Text des textField als diesen Eigenschaftswert festlegen.

So:

Im Viewcontroller, den die anderen Viewcontroller präsentieren:

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

Und im Innern des präsentiert Viewcontroller:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

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

Endlich !! Vielen Dank für Ihre Antwort. –

0

Überprüfen Sie, ob "VCT.textField" an diesem Punkt nicht Null ist. Ich vermute, du wirst feststellen, dass es nichts ist.

Sie müssen es entweder über "@property (strong) IBOutlet UITextField * textField" verfügbar machen, oder Sie müssen die Zeichenfolge irgendwo anders speichern (z. B. eine "NSString" -Eigenschaft?), Die das Textfeld lädt, wenn die Ansicht vollständig geladen ist.

Verwandte Themen