2009-12-16 8 views
1

Les applications Apple telles que Mail, Contacts et SMS font apparaître UIKeyboard dans la vue. Le UIKeyboard glisse dans la vue au lieu d'apparaître comme une animation séparée. J'ai essayé de recréer le même comportement appelant [myTextField becomeFirstResponder] dans différents endroits comme viewWillAppear:animated, viewDidLoad, loadView, navigationController:willShowViewController:animated: mais rien ne fonctionne.Comment faire apparaître UIKeyboard dans une vue?

J'ai lu dans un post (impossible de trouver le post maintenant) que cela semble impossible à faire quand vous voulez que le UIKeyboard apparaisse avec un UITableView. Cependant, cette conclusion semble incompatible avec les applications Apple. Quelqu'un peut-il confirmer?

Existe-t-il une solution?

Répondre

1

Le clavier que nous utilisons pour les iPhone Devs apparaît dans son propre UIWindow, donc il glissera toujours du bas vers le bas, quelle que soit la vision acrobatique que vous fassiez dans votre application.

Les applications Apple ont évidemment accès à des fonctionnalités améliorées du clavier que nous ne pouvons pas (encore) utiliser.

+0

Je pense que ce n'est pas le cas. Semble que les gars de Tapbot peuvent les implémenter en vue de tweeter dans leur application Tweetbot. Il existe des applications tierces qui peuvent le faire, pas seulement des applications d'Apple. –

+0

Cette réponse était de Décembre 2009, les choses ont changé pour le mieux dans l'intervalle. ;) – Pascal

1

Vous pouvez reproduire cette fonctionnalité en redimensionnant vos cadres d'affichage dans un bloc d'animation lorsque vous recevez une notification UIKeyboardWillShowNotification. Supposons que vous disposiez d'une vue de champ de texte au bas de votre vue, comme l'a l'application SMS lorsqu'elle affiche une conversation par SMS pour la première fois. Lorsque votre champ de texte devient un robinet, la UIKeyboardWillShowNotification se déclenche à quel point vous pouvez animer ce point de vue comme ceci:

[UIView beginAnimations:nil context:NULL]; 
[textFieldView setFrame:CGRectMake(0.0f, 416.0f, 320.0f, 216.0f)]; 
// Also resize your table view 
[tableView setFrame:CGRectMake(0.0f, 0.0f, 320.0f, 372.0f)]; 
[UIView commitAnimations]; 

Vous pouvez ensuite réinitialiser vos cadres de vue si vous recevez une notification de UIKeyboardWillHideNotification.

Je n'ai pas compris les positions exactes des images ici, donc vous devrez calculer cela vous-même, mais cela devrait vous donner l'idée de base. Pensez simplement en termes d'où vous voulez que vos cadres de vue soient après les animations et juste placez les cadres à l'intérieur d'un bloc d'animation (c'est-à-dire -beginAnimations, -commitAnimations).

Cordialement.

2

Pour quel SDK construisez-vous? Je me suis peut-être trompé, mais je pensais que Apple avait dit quelque chose sur l'amélioration du comportement des contrôleurs de vue poussés à l'écran et le comportement d'autres animations.

Pour ce que ça vaut, j'ai travaillé sur mon projet en appelant le becomeFirstResponder sur mon instance UISearchBar au viewWillAppear:. Je construis contre le 3.1 SDK.

0

La réponse de Jablair est proche, même en remontant vers les SDK 2.x - becomeFirstResponder est la clé, mais il devrait être appelé en viewDidLoad. En voici une autre (répondue) SU question on the topic.

0

Ce n'est pas la fonctionnalité privée d'Apple SDK. Dans iOS 7 (ou toute autre version avant), vous pouvez faire une chose simple loadview, viewDidLoad ou viewWillAppear

[yourTextView performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0]; 

Dans ce cas, vous aurez l'apparence à droite et à gauche de la clavier aligné avec le mouvement du contrôleur de vue poussant. Notez que tout appel direct de devientFirstResponder donne l'animation standard du bas au moins dans iOS 7.

Questions connexes