2014-03-19 21 views
12

Ich habe einen Formularbildschirm mit mehreren Eingabefeldern, die in UITableView enthalten sind. Wenn ein Benutzer eine Bluetooth-Tastatur anschließt, kann er die "Tab" -Taste drücken. Das Problem dabei ist, dass die Methode textFieldShouldBeginEditing für jedes Textfeld mehrfach aufgerufen wird. Ist es das normale Verhalten? Das normale Verhalten wäre, wenn ein Feld im Fokus ist und der Benutzer die Tabulatortaste drückt, dann sollte der Cursor zu einem anderen Textfeld springen und so würde textFieldShouldBeginEditing nur einmal (für dieses Textfeld) aufgerufen werden.textFieldShouldBeginEditing wird mehrfach aufgerufen, wenn die "Tab" -Taste gedrückt wird

Es scheint, dass dieses Problem nicht gelöst ist (post1, post2). Habt ihr das Vorhandensein dieses Problems ignoriert oder eine Lösung dafür gefunden?

+0

Können Sie bitte posten die Ausgabe des folgenden: - (BOOL) textFieldShouldBeginEditing: (UITextField *) textfield { NSLog (@ "Textfeld:% @", Textfeld); } –

+1

@SebastianBorggrewe Es wird verschiedene textField-Objekte drucken, so dass es für jedes einzelne Textfeld aufgerufen wird. Habe das schon gemacht. – Centurion

+1

überprüfen: [link] (http://weaklyreferenced.wordpress.com/2012/11/13/responding-to-the-tab-and-shift-tab-keys-on-ios-5-ios-6-with -an-external-Tastatur /) für Zeiger – staticVoidMan

Antwort

1

Ich habe eine UIViewController, wo ich auf die UITextFieldDelegate textFieldShouldBeginEditing höre und eine spezielle Aktion nur auf einem meiner Textfelder haben. Wenn Sie Tab auf einer Bluetooth-Tastatur drücken, wird der Spezialfall ausgelöst. Ich

Heute habe endlich Eine Lösung:

Ich bin ein keycommand für die Tab-Taste zu registrieren und dann auf dem UIResponder eine Kategorie verwenden, die die firstResponder (die aktuelle Textfield) zu finden und dann Brennen die Rückkehr über die Delegate-Methode.

Sie werden zunächst diese Kategorie müssen die firstResponder zu bekommen: https://stackoverflow.com/a/21330810/747369

Dann einfach das keycommand registrieren und die aktuellen firstResponder erhalten.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self addKeyCommand:[UIKeyCommand keyCommandWithInput:@"\t" modifierFlags:0 action:@selector(tabKeyPressed:)]]; 
} 

- (void)tabKeyPressed:(UIKeyCommand *)sender 
{ 
    id firstResponder = [UIResponder currentFirstResponder]; 
    if ([firstResponder isKindOfClass:[UITextField class]]) 
    { 
     UITextField *textField = (UITextField *)firstResponder; 
     // Call the delegate method or whatever you need 
     [self textFieldShouldReturn:textField]; 
    } 
} 
+0

Ich habe kürzlich herausgefunden, dass dies nicht funktioniert, wenn Sie Umschalt + Tab verwenden. Dies würde einen anderen KeyCommand mit den entsprechenden ModifierFlags erfordern. – neonhomer

Verwandte Themen