49 votes

Indiquer à un UITextField qu'il est le premier à répondre lorsqu'il est intégré à un UITableViewCell

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

Lorsque mon point de vue, les charges, je veux le champ de texte pour devenir secouriste. J'ai un pointeur vers le champ de texte dans la cellule du tableau, donc, pour ce faire, je suis en train d'essayer:

[myTextField becomeFirstResponder];

Cela renvoie NO tout le temps, quel que soit le moment où elle l'appelle, qui, selon les docs signifie que le champ de texte a refusé de devenir secouriste... Ce que je fais mal?

Edit:

Le champ de texte répond correctement à être touché. - Il mettre en place le clavier. C'est seulement quand la raconter à devenir secouriste par programme que le problème arrive.

44voto

Jasarien Points 35353

Il s'est avéré que le champ de texte était nul lorsque j'essayais de l'envoyer en premier répondant. Envoi becomeFirstResponder plus tard dans le cycle de vie travaillé.

9voto

Jawboxer Points 984

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

En supposant que vous ayez attribué une balise au champ de texte dans votre méthode cellForRowAtIndexPath, vous pouvez procéder de la manière suivante:

 - (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];
}
 

5voto

miracules Points 170

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 
}
 

1voto

Justin Kramer Points 1

Je n'arrivais pas à faire apparaître le curseur lorsque UITextField était désigné comme premier répondant dans les cellForRowAtIndexPath . Le champ de texte fonctionnerait parfaitement, mais il ne montrait pas le curseur clignotant à l'intérieur du champ. Lorsque vous appuyez et maintenez enfoncé, l’agrandissement du zoom n’affiche pas non plus de curseur.

J'ai contourné cet étrange problème en plaçant mon becomeFirstResponder dans la méthode didSelectRowAtIndex .

0voto

Art Gillespie Points 6139

Votre propriété UITableView editing définie sur YES ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X