Clavier de Défilement sur les Actifs du Champ de Texte de Défilement de la Vue?
J'ai une application avec une vue qui a des champs de texte à partir du haut de la vue vers le bas de la vue. J'en avais besoin pour faire défiler lors de l'édition des bas champs, de sorte que les champs seraient visibles, mais ce n'est pas en faisant semblant de travailler correctement.
À la suite de la Apple docs, j'ai placé tous de ce code dans mon programme (Listes de 4-1, 4-2), et a ajouté l' scrollView
et activeField
points de vente de mon fichier d'en-tête et lié à l'IB.
Le problème est que dès que je clique dans un champ de texte, TOUS les champs de texte à aller hors de la vue jusqu'à ce que je fermer le clavier. Ils ont faites défiler vers le bas très loin (encore une fois, assez loin de là où aucun des champs n'est visible).
Personne ne sait ce que le problème pourrait être causé par?
Je suis placer le code dans ici à partir de l'Apple Docs de sorte que vous pouvez voir exactement ce que le code que j'utilise sans avoir à cliquer.
//my .h
IBOutlet UIScrollView *scrollView;
IBOutlet UITextField *activeField;
//.m
//Call this method somewhere in your view controller setup code.
- (void)registerForKeyboardNotifications
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillBeHidden:)
name:UIKeyboardWillHideNotification object:nil];
}
//Called when the UIKeyboardDidShowNotification is sent.
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
//If active text field is hidden by keyboard, scroll it so it's visible
//Your application might not need or want this behavior.
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;
if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) {
CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height);
[scrollView setContentOffset:scrollPoint animated:YES];
}
}
//Called when the UIKeyboardWillHideNotification is sent
- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
activeField = textField;
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
activeField = nil;
}
Cette petite quantité de code est probablement OK, pour le "Fair use" fins.
Ok, merci. James, je suppose que cela signifie que vous doit le remettre si vous le souhaitez. Désolé pour la peine.
Au lieu de:
CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height); [scrollView setContentOffset:scrollPoint animated:YES];
je trouve que l'utilisation de la suite fonctionne beaucoup mieux: [scrollView scrollRectToVisible:activeField.frame animated:YES];
OriginalL'auteur Baub | 2011-08-25
Vous devez vous connecter pour publier un commentaire.
Mise à JOUR: - Dessous de la réponse est obsolète. Pour l'instant, vous pouvez utiliser le bouton "TPkeyboardavoiding" bibliothèque pour manipuler tout type de champ texte de l'opération dans UIScrollView, UITableView & beaucoup plus. Essayez-le et laissez-moi savoir si quelqu'un a un problème dans l'intégration.
Vieille Réponse
Il n'y a pas besoin de s'inscrire pour le clavier notifications pour cette fonctionnalité. Pour le centre de l'actif textField l'écran au-dessus du clavier, il vous suffit de définir la contentOffset de la UIscrollView deux méthodes comme indiqué ici:
Remarque: Tous les Champs doivent avoir différentiels des tags Comme 1,2,3 et donc pas de. Et de définir des délégués de soi.
Merci,
center.y
sera la mauvaise position. Par conséquent, on devrait utiliser quelque chose comme ceci à la place qui calcule la position correcte:_scrollView.contentOffset = CGPointMake(0, [_scrollView convertPoint:CGPointZero fromView:textField].y - 60);
qu'est-ce que la -60 valeur?
-60 est le décalage qui sera variable en fonction de votre point de vue et d'un clavier de taille. Dans mon cas, la valeur qui était le mieux pour moi.
OriginalL'auteur MinuMaster
Depuis que j'ai trouvé, j'ai utiliser TPKeyboardAvoiding
Il fonctionne très bien et est très facile à installer:
dans le xib, via l'identité de l'inspecteur)
Automatiquement crochets "Suivant" boutons sur le clavier pour passer à travers les champs de texte.
Bonne chance!
OriginalL'auteur Cristina Sita
@Minumaster approche fonctionne bien mais j'aimerais suggérer un moyen beaucoup plus simple encore généralisé façon, tout comme apple ne prend par les claviers de la hauteur en considération ce qui est très utile lorsque nous sommes à l'aide de la barre d'outils personnalisée sur le dessus du clavier.
si apple ici a eu quelques problèmes.
Voici ma démarche (Légèrement modifié de pomme) -
OriginalL'auteur Sam92
Après s'être assuré le délégué était ensemble, je suis allé dans le code et en tira toutes les coordonnées de tout et de toutes les mathématiques et avait pour définir manuellement certaines variables, mais maintenant il fonctionne comme prévu.
Si quelqu'un a besoin d'aide avec elle dans l'avenir, je serai heureux de l'aider. Mon Twitter est dans mon profil.
Désolé pour la lenteur de la réaction. Été très occupé au travail. Avez-vous un peu de code, je peux regarder? Si vous êtes à l'aide de l'IB, assurez-vous que tous vos points de vente sont accrochés.
Hey James, merci pour votre réponse, j'ai résolu ce problème par moi-même quelques heures à peine après que je vous ai demandé. merci quand même!!!
Pas de problème! Avoir un bon! 🙂
Je pense que l'autre réponse ici doit être accepté de répondre, car il donne une réelle, utilisable répondre à la problématique énoncée.
OriginalL'auteur Baub