2010-01-28 2 views
6

Je souhaite modifier les UITextInputTraits d'un clavier alors qu'il est utilisé ....Est-il possible de changer UITextInputTraits alors qu'un UIKeyboard est en vue?

Code Mon idéal ressemblerait à quelque chose comme ceci:

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

Alors ... J'ai un autre Bouton 'Return' pour une chaîne vide car je fais une chaîne avec un peu de texte. Le code que j'ai posté ci-dessus ne fonctionne pas, le clavier conserve ses caractéristiques d'entrée de texte originales.

Des idées, ou est-ce que ça ne marchera jamais, peu importe combien j'essaie?

À la votre!

Nick.

Merci à Deepak, voici le code que j'ai utilisé:

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; 
} 

Répondre

5

Vous pouvez faire ce travail en ajoutant à la fin de la méthode des lignes suivantes.

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

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

    [textField resignFirstResponder]; 
    [textField becomeFirstResponder]; 
} 

Cela devrait fonctionner.

Vous l'éteignez et l'éteignez de façon à ce que l'entrée de texte change. La seconde est de s'assurer que vous ne retournez que si nécessaire.

+0

Génie, merci beaucoup pour cela. Cela a fonctionné presque parfaitement ... la seule chose qui n'a pas fonctionné était quand vous avez démissionné d'un clavier, vous perdez le texte dans le UITextField - donc j'ai juste dû mettre en cache ça! Je posterai le code exact que j'ai utilisé dans ma question pour les autres. –

4

[textField reloadInputViews] semble faire l'affaire ...

+0

Cela fonctionne aussi bien que la réponse de Deepak Danduprolu pour moi – richy

0

resignFirstResponder/becomeFirstResponder & reloadInputViews ont des mises en garde. Voir stackoverflow.com/questions/5958427/.... Ceux-ci changent le clavier à son état initial. Ainsi, si l'utilisateur a basculé sur l'une des autres dispositions de clavier (chiffres, ponctuation, etc.), cet état sera perdu. Je n'ai jamais trouvé une bonne solution.

Questions connexes