ส่วนขยายที่รวดเร็วที่ใช้คำตอบของ mxcl เพื่อทำให้เป็นเรื่องง่ายโดยเฉพาะอย่างยิ่ง (ปรับให้เข้ากับ swift 2.3 โดย Traveler):
extension UITextField {
class func connectFields(fields:[UITextField]) -> Void {
guard let last = fields.last else {
return
}
for i in 0 ..< fields.count - 1 {
fields[i].returnKeyType = .Next
fields[i].addTarget(fields[i+1], action: "becomeFirstResponder", forControlEvents: .EditingDidEndOnExit)
}
last.returnKeyType = .Done
last.addTarget(last, action: #selector(UIResponder.resignFirstResponder), forControlEvents: .EditingDidEndOnExit)
}
}
ใช้งานง่าย:
UITextField.connectFields([field1, field2, field3])
ส่วนขยายจะตั้งค่าปุ่มย้อนกลับเป็น "ถัดไป" สำหรับทุกคนยกเว้นฟิลด์สุดท้ายและไปที่ "เสร็จสิ้น" สำหรับฟิลด์สุดท้ายและเลื่อนโฟกัส / ยกเลิกคีย์บอร์ดเมื่อแตะ
สวิฟท์ <2.3
extension UITextField {
class func connectFields(fields:[UITextField]) -> Void {
guard let last = fields.last else {
return
}
for var i = 0; i < fields.count - 1; i += 1 {
fields[i].returnKeyType = .Next
fields[i].addTarget(fields[i+1], action: "becomeFirstResponder", forControlEvents: .EditingDidEndOnExit)
}
last.returnKeyType = .Done
last.addTarget(last, action: "resignFirstResponder", forControlEvents: .EditingDidEndOnExit)
}
}
SWIFT 3:
ใช้แบบนี้ -
UITextField.connectFields(fields: [field1, field2])
Extension:
extension UITextField {
class func connectFields(fields:[UITextField]) -> Void {
guard let last = fields.last else {
return
}
for i in 0 ..< fields.count - 1 {
fields[i].returnKeyType = .next
fields[i].addTarget(fields[i+1], action: #selector(UIResponder.becomeFirstResponder), for: .editingDidEndOnExit)
}
last.returnKeyType = .go
last.addTarget(last, action: #selector(UIResponder.resignFirstResponder), for: .editingDidEndOnExit)
}
}