2010-01-28 6 views
6

ich die UITextInputTraits einer Tastatur ändern möchten, während es in Betrieb ist ....Ist es möglich, UITextInputTraits zu ändern, während ein UIKeyboard in Sicht ist?

Mein ideal Code würde wie folgt aussehen:

- (IBAction)nameTextDidChange:(UITextField *)sender { 
    if ([sender.text isEqualToString:@""]) { 
     sender.returnKeyType = UIReturnKeyDone; 
    } else { 
     sender.returnKeyType = UIReturnKeySearch; 
    } 
} 

So ... habe ich eine andere 'Return' Knopf für eine leere Zeichenfolge, wie ich eine Zeichenfolge mit etwas Text in. Der Code, den ich oben geschrieben, funktioniert nicht, die Tastatur behält ihre ursprünglichen Texteingabe Merkmale.

Irgendwelche Ideen, oder wird das nie funktionieren, egal wie sehr ich es versuche?

Prost!

Nick.

Dank Deepak, ist dies der Code, den ich tatsächlich verwendet:

if ([sender.text isEqualToString:@""]) { 
    sender.returnKeyType = UIReturnKeyDone; 

    [sender resignFirstResponder]; 
    [sender becomeFirstResponder]; 
} else if (sender.returnKeyType == UIReturnKeyDone) { 

    NSString *cachedLetter = sender.text; 

    sender.returnKeyType = UIReturnKeySearch; 

    [sender resignFirstResponder]; 
    [sender becomeFirstResponder]; 

    sender.text = cachedLetter; 
} 

Antwort

5

Sie können diese Arbeit machen, indem Sie die folgenden Zeilen am Ende der Methode hinzufügen.

if ([textField.text isEqualToString:@""]) { 
    textField.returnKeyType = UIReturnKeyDone; 

    [textField resignFirstResponder]; 
    [textField becomeFirstResponder]; 
} else if (textField.returnKeyType == UIReturnKeyDone) { 
    textField.returnKeyType = UIReturnKeySearch; 

    [textField resignFirstResponder]; 
    [textField becomeFirstResponder]; 
} 

Dies sollte funktionieren.

Sie im Grunde spiegeln es ein und aus, so dass die Texteingabe ändert. Die zweite Option besteht darin, sicherzustellen, dass Sie nur bei Bedarf spiegeln.

+0

Genie, vielen Dank dafür. Es funktionierte fast perfekt. Das Einzige, was nicht funktionierte, war, dass du den Text im UITextField löschst, wenn du auf eine Tastatur zurückgibst. Ich werde den genauen Code, den ich in meiner Frage verwendet habe, für andere veröffentlichen. –

4

[textField reloadInputViews] scheint den Trick zu tun ...

+0

Das funktioniert genauso gut wie die Antwort von Deepak Danduprolu für mich – richy

0

ResignFirstResponder/becomeFirstResponder & reloadInputViews haben einige Vorbehalte. Siehe stackoverflow.com/questions/5958427/.... Diese ändern die Tastatur in ihren ursprünglichen Zustand zurück. Wenn der Benutzer also auf eines der anderen Tastaturlayouts umgeschaltet hat (Zahlen, Interpunktion usw.), geht dieser Zustand verloren. Ich habe noch nie eine gute Lösung gefunden.