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

Était-ce utile?

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:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top