Je sais que vous pouvez utiliser la propriété "Inset" dans Interface Builder pour faire en sorte qu'une vue de défilement soit insérée depuis la fenêtre principale afin qu'elle ne soit pas inférieure à la contrôles sur l'écran comme une barre d'onglets, mais comment pouvez-vous faire cela par programmation pour ajuster quand un clavier est ajouté à l'écran? Actuellement, ma vue de défilement a des cellules sous le clavier qui ne peuvent pas être atteintes car la vue enregistre toujours le bas de la vue défilée comme le bas du téléphone, pas le haut du clavier. De l'aide?Modification des incrustations de défilement d'UITableView pour refléter la taille d'un clavier iPhone
Répondre
#pragma mark Keyboard Handling
- (void) viewDidAppear:(BOOL) ani {
onscreen = YES;
NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(keyboardWillAppear:) name:UIKeyboardWillShowNotification object:nil];
[center addObserver:self selector:@selector(keyboardDidAppear:) name:UIKeyboardDidShowNotification object:nil];
[center addObserver:self selector:@selector(keyboardWillDisappear:) name:UIKeyboardWillHideNotification object:nil];
}
- (void) viewDidDisappear:(BOOL) ani {
onscreen = NO;
NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
[center removeObserver:self name:UIKeyboardWillShowNotification object:nil];
[center removeObserver:self name:UIKeyboardDidShowNotification object:nil];
[center removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}
- (void) keyboardWillAppear:(NSNotification*) n {
NSLog(@"Keyboard is about to appear");
}
- (void) keyboardDidAppear:(NSNotification*) n {
CGRect bounds = [[[n userInfo] objectForKey:UIKeyboardBoundsUserInfoKey] CGRectValue];
bounds = [self.view convertRect:bounds fromView:nil];
CGRect tableFrame = searchResultsTable.frame;
tableFrame.size.height -= bounds.size.height; // subtract the keyboard height
if (self.tabBarController != nil) {
tableFrame.size.height += 48; // add the tab bar height
}
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(shrinkDidEnd:finished:contextInfo:)];
searchResultsTable.frame = tableFrame;
[UIView commitAnimations];
//[self hideEditorView:currentEditorView];
//[currentEditorView removeFromSuperview];
}
- (void) shrinkDidEnd:(NSString*) ident finished:(BOOL) finished contextInfo:(void*) nothing {
NSIndexPath* sel = [searchResultsTable indexPathForSelectedRow];
if (![[searchResultsTable indexPathsForVisibleRows] containsObject:sel])
{
[searchResultsTable scrollToNearestSelectedRowAtScrollPosition:UITableViewScrollPositionMiddle animated:YES];
}
}
- (void) keyboardWillDisappear:(NSNotification*) n {
CGRect bounds = [[[n userInfo] objectForKey:UIKeyboardBoundsUserInfoKey] CGRectValue];
bounds = [self.view convertRect:bounds fromView:nil];
CGRect tableFrame = searchResultsTable.frame;
tableFrame.size.height += bounds.size.height; // add the keyboard height
if (self.tabBarController != nil) {
tableFrame.size.height -= 48; // subtract the tab bar height
}
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(shrinkDidEnd:finished:contextInfo:)];
searchResultsTable.frame = tableFrame;
[UIView commitAnimations];
[searchResultsTable scrollToNearestSelectedRowAtScrollPosition:UITableViewScrollPositionMiddle animated:YES];
}
Deux options. (Quand vous dites défiler vue je pense que vous voulez dire vue de table puisque le titre le suggère)
Utilisez un
UITableViewController
, si le clavier est ajouté à la vue de la table, je crois qu'il fera le Redimensionnement pour vousdans le protocole textfield ou zone de texte dans la méthode
- (void)textFieldDidBeginEditing:(UITextField *)textField
, redimensionnez votre image de vue de la table et à la fin placèrent ne terminer l'édition arrière de sorte (celui-ci vous pouvez également faire si sa vue de défilement et non un tableView)(void) textFie ldDidBeginEditing: (UITextField *) textField { CGRect frame = tableView.frame; // ou faites défiler la vue frame.size.height = frame.size.height- keyboardHeight; tableView.frame = cadre}
(void) textFieldDidEndEditing: (UITextField *) textField {CGRect frame = tableView.frame; // ou faites défiler la vue frame.size.height = frame.size.height + keyboardHeight; tableView.frame = cadre }
Hope this helps
« Utiliser un UITableViewController » était l'indice le plus utile dans toutes les questions relatives à ce sujet. – hop
pas vraiment. Je pense que l'événement pour le clavier comme indiqué ci-dessous ou être un délégué du champ de texte sont à la fois bien et facile à mettre en œuvre ... – Daniel
Une autre façon facile en utilisant Interface Builder ou un code
Réglez [Tableau Taille Pied de page Hauteur] propriété à 200 (jouer avec cela pour votre mise en page). Cela rend la table plus grande que le cadre englobant dans lequel elle est contenue, ce qui permet de faire défiler la table plus haut que la normale. Fonctionne parfaitement pour laisser l'utilisateur faire défiler la table vers le haut et vers le bas comme il le faut.
Je pense que vous devriez utiliser Content/Scroller Insets pour ce genre de choses – kolinko
J'ai créé un petit projet qui résout ce problème avec le clavier, dans mon cas, j'ai seulement besoin de faire monter la vue de la table quand le clavier apparaît.
Espérons que cela aide!
- 1. Modification de la taille de la légende des boutons dans le constructeur d'interface (application iPhone)
- 2. Modification de la disposition du clavier pour un autre processus
- 3. Recevoir des événements clavier iPhone
- 4. Clavier de l'application iPhone
- 5. Modification de la taille des colonnes d'une table JTable
- 6. Modification de la taille du champ DBF
- 7. comment: ajouter un clavier de défilement/entrée pour autosuggest script?
- 8. Clavier Iphone
- 9. Evénements clavier pour les touches de modification dans Safari 2.0
- 10. Clavier personnalisé sur iPhone
- 11. Modification de la disposition du clavier sous Windows Mobile
- 12. iphone Clavier japonais
- 13. Modification de la langue d'entrée du clavier en Java
- 14. clavier iphone sans textview
- 15. IPhone Taille de l'application
- 16. Disapperiang IPhone numérique Clavier
- 17. clavier personnalisé dans iphone
- 18. Modification de la taille de l'onglet par défaut dans RichTextBox
- 19. Modification de la taille de police de pdfptable
- 20. Modification dynamique de la taille du panneau splitContainer
- 21. Est-il possible de personnaliser l'apparence et la taille d'un clavier sur l'iPhone?
- 22. Lire des lettres à partir d'un clavier iPhone personnalisé
- 23. Disposition du clavier iPhone pour les numéros négatifs?
- 24. Comment obtenir la taille d'un contexte Iphone
- 25. Modification de la taille de police par défaut pour NSTable/NSOutlineView
- 26. iphone définir une taille de police fixe pour UILabels
- 27. Comment cacher le clavier en utilisant TableView dans Iphone?
- 28. iPhone SDK: Modification de fichiers XML
- 29. Comment puis-je refléter la sélection de texte?
- 30. Modification d'une image sous licence LGPL pour créer des icônes d'application iPhone
c'est une alternative, et je l'aime parce que de cette façon la vue de table ne doit pas être le délégué de les champs de texte ...+1 – Daniel
Vous ne devriez pas utiliser un trait de soulignement comme préfixe pour vos méthodes, car elles pourraient entrer en conflit avec les méthodes d'Apple. Vous devriez utiliser quelque chose comme _slf à la place. –
@Rafael là vous allez, enlevé les traits de soulignement :) – slf