Stellen Sie sicher, dass in Ihren Textfeldern der Delegatsatz festgelegt ist, und implementieren Sie die Methode textFieldShouldReturn
. Dies ist die Methode, die aufgerufen wird, wenn der Benutzer die Return-Taste (egal wie es aussieht) antippt.
Das Verfahren könnte wie folgt aussehen:
func textFieldShouldReturn(textField: UITextField) -> Bool {
if textField == self.field1 {
self.field2.becomeFirstResponder()
}
return true
}
Die eigentliche Logik hier in kann variieren. Es gibt zahlreiche Ansätze, und ich würde auf jeden Fall von einer massiven Kette abraten, wenn Sie viele Textfelder haben, aber der Kern hier ist zu bestimmen, welche Ansicht gerade aktiv ist, um festzustellen, welche Ansicht aktiv werden soll. Sobald Sie bestimmt haben, welche Ansicht aktiv werden soll, rufen Sie die Methode becomeFirstResponder
dieser Ansicht auf.
Für einige Code Sauberkeit, können Sie eine UITextField
Erweiterung betrachten, die etwa wie folgt aussieht:
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.nextField?.becomeFirstResponder()
return true
}
Once:
private var kAssociationKeyNextField: UInt8 = 0
extension UITextField {
var nextField: UITextField? {
get {
return objc_getAssociatedObject(self, &kAssociationKeyNextField) as? UITextField
}
set(newField) {
objc_setAssociatedObject(self, &kAssociationKeyNextField, newField, .OBJC_ASSOCIATION_RETAIN)
}
}
}
wie folgt und dann unsere textFieldShouldReturn
Methode ändern aussehen Wenn Sie dies getan haben, sollten Sie einfach die neue nextField
-Eigenschaft jedes Textfelds in viewDidLoad
festlegen :
self.field1.nextField = self.field2
self.field2.nextField = self.field3
self.field3.nextField = self.field4
self.field4.nextField = self.field1
Obwohl, wenn wir wirklich wollten wir das Grundstück mit @IBOutlet
Präfix könnten, und das würde es uns ermöglichen, unser „Nextfield“ Eigentumsrecht in Interface Builder zu anschließen.
Ändern Sie die Erweiterung wie folgt aussehen:
private var kAssociationKeyNextField: UInt8 = 0
extension UITextField {
@IBOutlet var nextField: UITextField? {
get {
return objc_getAssociatedObject(self, &kAssociationKeyNextField) as? UITextField
}
set(newField) {
objc_setAssociatedObject(self, &kAssociationKeyNextField, newField, .OBJC_ASSOCIATION_RETAIN)
}
}
}
Und nun die nextField
Eigenschaft in Interface Builder Haken:
(Richten Sie Ihren Delegierten, während Sie auch hier sind .)
Und von co Wenn die nextField
-Eigenschaft nil
zurückgibt, versteckt sich die Tastatur nur. Hier
Wo ich die Erweiterung Code in der Datei stellen Sie? –
Überall. Ich würde eine neue Datei dafür machen. – nhgrif
Ich bekomme immer einen Fehler mit der "Erweiterung". Es besagt, dass diese Deklaration nur bei der Dateiquelle gültig ist. –