UITextField sous-vue UITableViewCell pour devenir premier intervenant?
-
27-09-2019 - |
Question
J'ai une application de données de base qui utilise un contrôleur de navigation pour forer vers le bas pour une vue détaillée et si vous modifiez l'une des lignes de données dans la vue détaillée vous êtes redirigé vers une vue Edition pour la cette ligne unique, comme dans les pommes CoreDataBooks exemple (à l'exception CoreDataBooks utilise seulement UITextField
lui-même, et non pas celle qui est une sous-vue de UITableViewCell
comme le mien)!
La vue d'édition est un UITableviewController
qui crée sa table avec une seule section seule rangée et un UITextfield
dans la cellule, programatically.
Ce que je veux arriver est lorsque vous sélectionnez une ligne d'éditer et de la vue d'édition est poussé sur la pile de navigation et la vue de modifier est animée en mouvement à travers l'écran, je veux que le champ de texte à sélectionner comme firstResponder afin que le clavier montre déjà que la vue se déplace à travers l'écran à la position de prise. Comme dans l'application Contacts ou dans l'App CoreDataBooks.
J'ai actuellement le code suivant dans mon application qui provoque la vue de la charge et vous voyez apparaître le clavier (qui est pas ce que je veux, je veux le clavier déjà là)
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[theTextField becomeFirstResponder];
}
Vous ne pouvez pas mettre cela en -viewWillAppear
que le champ de texte n'a pas encore été créé pour theTextField
est nul. Dans l'App CoreDataBooks où ils atteignent ce que je veux qu'ils chargent leur point de vue à partir d'une pointe afin qu'ils utilisent le même code mais dans -viewWillAppear
que le champ de texte a déjà été créé!
Y at-il de toute façon de se déplacer sans créer une plume, je veux garder la programatic de mise en œuvre pour permettre une plus grande flexibilité.
Merci beaucoup
La solution
Après avoir parlé avec le soutien d'Apple Dev Team, j'ai une réponse!
Ce que vous devez faire est de créer un offscreen UITextField
dans -(void)loadView;
puis définissez comme premier intervenant alors sur la méthode de viewDidLoad
vous pouvez définir le UITextField
dans le UITableViewCell
être le premier répondeur. Heres quelques exemples de code (rappelez-vous que je fais cela dans un UITableViewController
donc je suis en train de créer le tableview aussi bien!
- (void)loadView
{
[super loadView];
//Set the view up.
UIView *theView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.view = theView;
[theView release];
//Create an negatively sized or offscreen textfield
UITextField *hiddenField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, -10, -10)];
hiddenTextField = hiddenField;
[self.view addSubview:hiddenTextField];
[hiddenField release];
//Create the tableview
UITableView *theTableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] bounds] style:UITableViewStyleGrouped];
theTableView.delegate = self;
theTableView.dataSource = self;
[self.view addSubview:theTableView];
[theTableView release];
//Set the hiddenTextField to become first responder
[hiddenTextField becomeFirstResponder];
//Background for a grouped tableview
self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
//Now the the UITableViewCells UITextField has loaded you can set that as first responder
[theTextField becomeFirstResponder];
}
J'espère que cela aide les personnes coincées dans la même position que moi!
Si quelqu'un d'autre peut voir une meilleure façon de le faire s'il vous plaît dire.
Autres conseils
Essayez le faire dans la méthode viewDidAppear, fonctionne pour moi.
Je pense que la solution la plus évidente est de créer le champ de texte dans la méthode init
du contrôleur de vue. C'est généralement vous permet de configurer la vue parce qu'un contrôleur de vue nécessite une propriété vue peuplée.
Ensuite, vous pouvez définir le champ de texte comme premier intervenant dans viewWillAppear
et le clavier doit être visible que les diapositives de vue dans.
avez-vous essayé d'utiliser les méthodes de délégué de UINavigationController:
NavigationController: willShowViewController: animation: