2010-10-15 15 views
13

Wenn eine Hardwaretastatur mit iOS verwendet wird, wird durch Drücken der Tabulatortaste oder der Umschalttaste automatisch zum nächsten bzw. vorherigen logischen Responder navigiert. Gibt es eine Möglichkeit, das gleiche programmatisch zu machen (d. H. Die Tabulatortaste zu simulieren, anstatt die logische Reihenfolge manuell zu verfolgen)?Tabulatortaste simulieren Drücken Sie im iOS-SDK

+6

Duplikat Frage: http://stackoverflow.com/questions/3241966/ focus-on-next-valid-key-view-on-iphone hat eine gute antwort bekommen. –

Antwort

0

Nicht sicher, ob dies hilft, aber im Kontext eines UITextFields, wenn Sie UITextFieldDelegate implementieren, wird - (BOOL)textFieldShouldReturn:(UITextField *)textField aufgerufen, wenn die Return-Taste der Soft-Tastatur gedrückt wird.

Ich habe versucht, direkt auf meine Laptop-Tastatur zu schlagen und es schien zwischen allen Textfeldern in der Reihenfolge, in der Sie sie zur Ansicht hinzugefügt haben, zu springen, aber ging nicht zu anderen Arten von Feldern (Knöpfe usw.).

Taste auf der Tastatur simuliert die Taste auf der Soft-Tastatur des Simulators, die wie erwartet funktioniert.

3

Sie können die "tab-order" mit der Eigenschaft tag definieren. Der folgende Post beschreibt, wie der nächste Tag-Index für UITextField s, How to navigate through textfields (Next/Done Buttons) zu finden ist.

Hier ist eine modifizierte Version des Codes von diesem Beitrag. Anstatt die Tastatur beim letzten Tag-Index zu entfernen, würde dieser folgende Code versuchen, zum ersten Tag-Index zurückzukehren.

-(BOOL)textFieldShouldReturn:(UITextField*)textField; 
{ 
    NSInteger nextTag = textField.tag + 1; 
    // Try to find next responder 
    UIResponder* nextResponder = [textField.superview viewWithTag:nextTag]; 
    if (nextResponder) { 
    // Found next responder, so set it. 
    [nextResponder becomeFirstResponder]; 

    return NO; 
    } 

    // Try to find the first responder instead... 
    // Assuming the first tag index is 1 
    UIResponder* firstResponder = [textField.superview viewWithTag:1]; 
    if (firstResponder) { 
    // loop back to the first responder 
    [firstResponder becomeFirstResponder]; 
    } else { 
    // Not found, so remove keyboard. 
    [textField resignFirstResponder]; 
    } 

    return NO; // We do not want UITextField to insert line-breaks. 
} 

Wenn Sie ein UI-Element andere als UITextField wollen, sollten Sie noch in der Lage sein, die gleiche Logik zu verwenden, mit ein paar mehr Kontrollen.

8

Wie William Niu ist richtig, aber Sie können auch diesen Code unten erläutert verwenden.

Ich habe diese verwendet und bekam success.Now das Beispiel UITextField betrachten ...

Sie UITextView die delegierte Methode verwenden können -(BOOL)textFieldShouldReturn:(UITextField*)textField wie unten erläutert.

Aber bevor Sie dies tun, sollten Sie jedem UITextField eine Markierung in einer Inkrement-Reihenfolge geben ... (Inkrement-Reihenfolge ist nicht erforderlich, aber für meinen Code ist es erforderlich, Sie können auch Dekrement-Reihenfolge, aber etwas Code verwenden) Änderungen, dies zu tun)

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 

    NSInteger nextTag = textField.tag + 1; 
    UIResponder* nextResponder = [self.view viewWithTag:nextTag]; 
    if (nextResponder) { 
     [nextResponder becomeFirstResponder];  
    } else { 
     [textField resignFirstResponder]; 
    } 
    return YES; 
} 

Hope this für Sie arbeiten ...

Glücklich Codierung ....

+0

Dies funktioniert mit statischen Textfeldern, und ist eigentlich ein großartiger Ansatz, aber es ist alles verblüffend, wenn Ihre Textfelder in wiederverwendbaren Tableviewcells sind. – n00neimp0rtant

Verwandte Themen