Déplacer du contenu situé sous le keyboard

J'ai une question concernant le code trouvé dans la documentation Apple Moving contenu situé sous le keyboard . J'ai fait des searchs à ce sujet, mais je cherche des éclaircissements sur les concepts que je suis un peu flous ici avant que je commence à avoir envie de solutions de rechange.

Malheureusement, dès que l'animation du keyboard se termine en déplaçant le keyboard, la vue descend et disparaît complètement du site. Cela arrive si le champ de text est réellement celui qui est couvert par le keyboard ou non. Alors maintenant je suis de return à essayer de comprendre le code fourni dans la documentation et après des tentatives de modification d'une variété de parameters, j'ai été incapable de le faire fonctionner correctement.

Le code pertinent fourni par Apple est:

- (void)keyboardWasShown:(NSNotification*)aNotification NSLog(@"keyboardWasShown"); 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) ) { NSLog(@"if"); CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height); NSLog(@"scrollPoint is %@", NSSsortingngFromCGPoint(scrollPoint)); [scrollView setContentOffset:scrollPoint animated:YES]; 

Tout d'abord, avant de changer quelque chose comme décrit ci-dessous, voici ce que j'ai:

 GO[4614:c07] keyboardWasShown 2012-09-08 22:58:23.892 DRO GO[4614:c07] if 2012-09-08 22:58:23.892 DRO GO[4614:c07] scrollPoint is {0, -281} 

Donc, en décomposant:

  1. NSLog juste info pour moi indiquant la méthode a été appelée

  2. NSDictionary – contient des informations sur le keyboard, y compris ses dimensions, de sorte que différentes tailles de keyboard dans différents dispositifs ou orientations seront automatiquement sockets en count.

  3. CGSize – obtention de la taille réelle du dictionary

  4. UIEdgeInsets – reference trouvée dans UIKit Function Reference – crée un encadré de bord pour le button ou la vue où un encart est une marge autour du rectangle de dessin où chaque côté (gauche, droite, haut et bas) peut avoir une valeur différente. Dans ce cas, réglez le bord inférieur à la hauteur du keyboard. Puisque mon sharepoint vue descend vers le haut, j'ai essayé d'inverser les valeurs «haut» et «bas», pensant peut-être qu'elles sont inversées. Au lieu que la vue défile doucement avec l'animation, maintenant elle disparaît à perte de vue lorsque le keyboard apparaît et je reçois ceci:

    GO [4829: c07] si 2012-09-08 23: 06: 57.146 DRO GO [4829: c07] scrollPoint est {0, -281}

  5. scrollView.contentInset: distance à laquelle la vue de contenu est insérée à partir de la vue de défilement englobante. Utilisez cette propriété pour append à la zone de défilement autour du contenu. L'unité de taille est des points. La valeur par défaut isUIEdgeInsetsZero Il semble que cela devrait append une zone en bas de la vue de défilement pour lui permettre de se déplacer avec le keyboard.

  6. scrollView.scrollIndicatorInset – indique à l'indicateur de défilement de se déplacer proportionnellement au mouvement de la vue en réponse au keyboard

  7. CGRect – créer un object aRect avec les dimensions de la vue.

  8. aRect – la valeur de hauteur du CGRect, réduite par la hauteur du keyboard. Je suis super flou ici – Devrait être la zone de la vue non couverte par le keyboard.

  9. si – si le point CG n'est pas (dans le rectangle qui se trouve sous le keyboard, à un point dans le champ de text actif) – ce qui n'a pas de sens; la logique ici m'échappe

  10. NSLog – me dire que nous sums arrivés si loin

  11. CGScrollPoint – Définir le point vers lequel la vue devrait défiler. Puisque l'origine de la vue est en haut à gauche, soustraire la hauteur du keyboard devrait lui faire défiler la distance de la hauteur du keyboard, en gardant le champ de text en vue. Juste pour les coups de pied, quand j'ai essayé de le changer en + kbSizeHeight j'ai eu la vue disparaissant rapidement et: GO [4682: c07] si 2012-09-08 23: 02: 48.078 DRO GO [4682: c07] scrollPoint est {0, 679 }

  12. NSLog – me dire quel sharepoint vue la vue doit être déplacée

  13. [scrollView – dire le scrollView pour s'ajuster au nouveau scrollPoing en utilisant l'animation

Je ne sais pas comment Apple le fait, je crois qu'ils recommandnt de mettre le contenu dans un scrollview puis quand vous appuyez sur le champ de text, vous dites à la scrollview de défiler vers le haut afin que vous puissiez voir ce que vous tapez.

Je suis un peu fainéant, donc tout ce que je fais c'est dire à la vue elle-même de se déplacer lorsque l'user tape sur un champ qui sera caché par le keyboard.

Je le fais habituellement avec:

 // shift view up self.view.transform = CGAffineTransformMakeTranslation(0, -someYOffsetValue); // shift view back down to original value self.view.transform = CGAffineTransformMakeTranslation(0, 0); 

Vous pouvez envelopper ceci dans un bloc UIView animateWithDuration: pour une transition en douceur.