web-dev-qa-db-fra.com

Dire à un UITextField de devenir le premier répondant tout en étant intégré dans un UITableViewCell

J'ai un UITextField qui est une sous-vue d'un UITableViewCell.

Lorsque ma vue se charge, je veux que le champ de texte devienne premier répondant. J'ai un pointeur sur le champ de texte dans la cellule du tableau, donc pour ce faire, j'essaie:

[myTextField becomeFirstResponder];

Cela renvoie NO tout le temps, quel que soit le moment où il est appelé, ce qui, selon les documents, signifie que le champ de texte a refusé de devenir le premier répondant ... Que fais-je de mal?

Modifier:

textfield répond correctement au toucher. Il fait ensuite apparaître le clavier. Ce n'est qu'en le signalant à becomefirstresponder par programme que le problème se produit.

47
Jasarien

Il s'est avéré que le champ de texte était nul lorsque j'essayais de l'envoyer comme premier répondeur. L'envoi de becomeFirstResponder plus tard dans le cycle de vie a fonctionné.

43
Jasarien

J'avais le même problème avec un champ de texte que j'avais ajouté comme sous-vue à une cellule de vue de table groupée - mais j'ai trouvé une solution après quelques fouilles.

En supposant que vous avez donné au champ de texte une balise dans votre méthode cellForRowAtIndexPath, vous pouvez faire quelque chose comme ceci:

- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];

myTextField = (UITextField *)[cell viewWithTag:kMyTextFieldTag];
[myTextField becomeFirstResponder];
}
8
Jim Rhoades

L'appeler dans le - (void) viewDidLoad fonctionnerait.

-(void)viewDidLoad{
   [super viewDidLoad];
   // Do any additional setup after loading the view.
   [self.myTextField becomeFirstResponder] 

   //... any other code you need 
}
5
miracules

Je n'arrivais pas à faire apparaître le curseur lorsque le UITextField a été nommé premier répondeur à l'intérieur du cellForRowAtIndexPath. Le champ de texte fonctionnerait très bien et dandy, mais il ne montrait pas le curseur clignotant à l'intérieur du champ. Lorsque vous maintenez la touche enfoncée, l'agrandissement du zoom n'affiche pas non plus de curseur.

J'ai contourné ce problème étrange en définissant mon becomeFirstResponder à l'intérieur de la méthode didSelectRowAtIndex.

1
Justin Kramer

Votre propriété UITableView editing est-elle définie sur YES?

0
Art Gillespie