/ / Ignorer le caractère de tabulation dans UITextField… (application iPad) - iphone, ipad, uitableview, uitextfield

Ignorer le caractère de tabulation dans UITextField… (application iPad) - iphone, ipad, uitableview, uitextfield

J'ai un TableView avec TextFields dans chaque cellule et je veux ces champs de texte ignorer l'onglet de caractère (t).

Lorsque vous appuyez sur la touche de tabulation, le textField:shouldChangeCharactersInRange la méthode n'est pas appelée

Est-ce que quelqu'un sait comment faire cela? Je sais qu'il n'y a pas de touche de tabulation dans l'iPad clavier, mais les blutooth et dock font et déclenche un comportement vraiment étrange.

Merci

Réponses:

3 pour la réponse № 1

Cela semble être un problème avec l'onglet (t) personnage. Ce caractère n’est pas traité comme les caractères normaux (par exemple a, b, c, 0, 1, 2, ...) et donc le

              - (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string;

La méthode déléguée ne sera jamais appelée.

Le résultat de l’utilisation d’un onglet, par exemple un clavier externe ou dans le simulateur signifie qu'un champ de texte actuellement actif renonce à son statut de premier répondant et au résultat de

[textField nextResponder]

deviendra le premier intervenant à la place.

L’IMO est actuellement un bogue (iOS SDK 4.3), c’est que la méthode de délégation

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField

n’est appelé qu’une fois (lorsque vous renvoyez oui) et lorsque vous resélectionnez le même champ de texte et utilisez à nouveau la touche de tabulation, la méthode ne sera pas appelée à nouveau.


2 pour la réponse № 2

Assurez-vous que le délégué pour UITextField est défini dans IB ou dans le code. Vérifiez que votre fichier .h a le UITextFieldDelegate spécifié

Tout devrait fonctionner maintenant.


2 pour la réponse № 3

Je pense que c'est possible, mais difficile. En gros, j'essayerais de faire en sorte que lorsque le champ de texte devienne le premier intervenant, aucune autre vue ne puisse devenir le premier intervenant. Ensuite, appuyer sur l'onglet ne fera rien. Ensuite, vous devrez inverser cet effet lorsqu'une autre vue pouvant réellement devenir le premier répondeur est sélectionnée ou lorsque le champ de texte quitte le premier répondant.


2 pour la réponse № 4

Implémentez cette méthode:

Ajoutez ceci dans votre AppDelegate.m

- (NSArray *)keyCommands {
static NSArray *commands;

static dispatch_once_t once;
dispatch_once(&once, ^{
UIKeyCommand *const forward = [UIKeyCommand keyCommandWithInput:@"t" modifierFlags:0 action:@selector(ignore)];
UIKeyCommand *const backward = [UIKeyCommand keyCommandWithInput:@"t" modifierFlags:UIKeyModifierShift action:@selector(ignore)];

commands = @[forward, backward];
});

return commands;
}

Ajoutez cette méthode dans le ViewController.m ou la sous-classe de UITextField dans laquelle vous voulez gérer LANGUETTE l'évenement important

- (void)ignore {

NSLog(@"Your Action");
}

Décrit dans: Comment définissez-vous l'ordre de tabulation dans iOS?


1 pour la réponse № 5

Avez-vous essayé de vérifier d'autres personnages dans legamme que vous appelez shouldChangeCharactersInRange avec? Cela s’assurera qu’il n’appelle pas correctement (en particulier un problème avec la touche de tabulation).

plus sur shouldChangeCharactersInRange ici