2016-03-23 22 views
0

Wenn mein UITextView eine Textzeile in mein erstes UITextField platziert, kann ich den Text nicht speichern.Warum speichert mein UITextField nicht?

Heres mein Code, dann ist dies die Informationen aus einem Textview

-(IBAction)print:(id)sender { 

NSLog(@"text = %@",[textView text]); 
NSArray *textArray = [[textView text] componentsSeparatedByString:@"\n"]; 


if (textArray.count > 0) { 
    NSString *line1 = textArray[0]; 
    [myTextField setText:line1]; 

    if (textArray.count > 1) { 
     NSString *line2 = textArray[1]; 
     [myTextField1 setText:line2]; 
    } 
} 


[textView setText:@""]; 
[textView resignFirstResponder]; 

} 

Heres, wie ich versuche zur Zeit zu bewegen, um die Informationen zu speichern und zu laden.

- (void)viewDidLoad { 
[super viewDidLoad]; 

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

[myTextField setText:[defaults valueForKey:@"textfield_text"]]; 
[myTextField setDelegate:self]; 

} 

- (void)textFieldDidEndEditing:(UITextField *)textField { 

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

NSString *defaultsKeyForTextField; 

if ([textField isEqual:myTextField]) { 

    defaultsKeyForTextField = @"textfield_text"; 

} 
[defaults setValue:textField.text forKey:defaultsKeyForTextField]; 
[defaults synchronize]; 
} 

Was scheint zu passieren ist, dass der Text nur speichert, wenn ich manuell Text eingeben.

+6

'textFieldDidEndEditing' wird nur aufgerufen, wenn das Textfeld den ersten Responder zurückgibt. – TangZijian

+0

sollten Sie Haltepunkte setzen und den Code debuggen, wenn Sie das Gefühl haben, dass etwas nicht so läuft, wie Sie es möchten. Sie können den PO-Befehl verwenden, um einen bestimmten Wert in der Konsole zu drucken. – Ujjwal

+0

Warum speichern Sie userdefault auch in viewdidload? –

Antwort

0

Als Benutzer TangZijian darauf hingewiesen wird textFieldDidEndEditing aufgerufen, wenn das Textfeld First Responder tritt zurück.

Keine Ihrer Code in print Funktion dies tun.
Da Textfeld als Erstantragsteller und sofort zurücktreten scheint es wie eine schlechte Idee, können Sie den Code in textFieldDidEndEditing zu print verschieben.

-(IBAction)print:(id)sender { 
    NSLog(@"text = %@",[textView text]); 
    NSArray *textArray = [[textView text] componentsSeparatedByString:@"\n"]; 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    NSString *defaultsKeyForTextField; 

    if (textArray.count > 0) { 
     NSString *line1 = textArray[0]; 
     [myTextField setText:line1]; 

     defaultsKeyForTextField = @"textfield_text"; 
     [defaults setValue:textField.text forKey:defaultsKeyForTextField]; 
     [defaults synchronize]; 

     if (textArray.count > 1) { 
      NSString *line2 = textArray[1]; 
      [myTextField1 setText:line2]; 
     } 
    } 
    [textView setText:@""]; 
    [textView resignFirstResponder]; 
} 
+0

Ich war wirklich müde, dass vorher und es hat nie funktioniert, aber funktionierte dieses Mal gut. Danke vielmals. – vype

0

Ich denke, Sie sollten das Editing Changed-Ereignis verwenden, um Änderungen an Ihren Textfeldern zu erkennen. Setzen Sie dies in Ihre viewDidLoad Methode.

[myTextField addTarget:self 
      action:@selector(textFieldDidChange:) 
      forControlEvents:UIControlEventEditingChanged]; 

Dann Ihren Code ändern:

- (void)textFieldDidChange:(UITextField *)textField { 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSString *defaultsKeyForTextField; 

    if ([textField isEqual:myTextField]) { 

     defaultsKeyForTextField = @"textfield_text"; 

    } 
    [defaults setValue:textField.text forKey:defaultsKeyForTextField]; 
    [defaults synchronize]; 
} 
+0

Noch kein Glück speichern und laden. – vype

+0

Ich logs und es scheint zu laden, aber nicht speichern, und ich denke es lädt nichts. – vype