能够轻松地从 UITextField/UITextView 移到下一个 UITextField/UITextView 的 Swift 代码。
某些 ViewController 有四个表单(文本字段或文本视图),如 nameTextField
、emailTextField
、passwordTextField
和 profileTextView
。
当他们在其中输入姓名并按下键盘上的“下一步”时,我希望这会自动移动到下一个表单。
所以,我将这样实现
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet private weak var nameTextField: UITextField!
@IBOutlet private weak var mailTextField: UITextField!
@IBOutlet private weak var passwordTextField: UITextField!
@IBOutlet private weak var profileTextView: UITextView!
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
if textField == nameTextField {
mailTextField.becomeFirstResponder()
} else if textField == mailTextField {
passwordTextField.becomeFirstResponder()
} else if textField == passwordTextField {
profileTextView.becomeFirstResponder()
} else {
return true
}
return false
}
}
或者,
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet private weak var nameTextField: UITextField!
@IBOutlet private weak var mailTextField: UITextField!
@IBOutlet private weak var passwordTextField: UITextField!
private var textfields = [UITextField]()
override func viewDidLoad() {
super.viewDidLoad()
textfields += [nameTextField, mailTextField, passwordTextField]
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
let tag = textField.tag
let nextIndex = tag + 1
if nextIndex < textfields.count {
textfields[nextIndex].becomeFirstResponder()
return false
}
return true
}
}
……不太好。
他们都很烦人!!!
FormChangeable
可以解决这些问题。
UITextFIeld
和 UITextView
。import FormChangeable
class ViewController: UIViewController {
@IBOutlet private weak var nameTextField: UITextField!
@IBOutlet private weak var mailTextField: UITextField!
@IBOutlet private weak var passwordTextField: UITextField!
@IBOutlet private weak var profileTextView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
nameTextField.nextForm = mailTextField
mailTextField.nextForm = passwordTextField
passwordTextField.nextForm = profileTextView
}
}
或者,
import FormChangeable
class ViewController: UIViewController {
@IBOutlet private weak var nameTextField: UITextField!
@IBOutlet private weak var mailTextField: UITextField!
@IBOutlet private weak var passwordTextField: UITextField!
@IBOutlet private weak var profileTextView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
let forms: [FormChangeable] = [nameTextField, mailTextField, passwordTextField, profileTextView]
forms.registerNextForm()
}
}
UITextFieldDelegate
的 func textFieldShouldReturn(textField:)UITextViewDelegate
的 func textView(textView:, shouldChangeTextInRange:, replacementText:)class ViewController: UIViewController, UITextFieldDelegate {
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.changeToNextForm()
return false
}
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
if text == "\n" {
textView.changeToNextForm()
return false
}
return true
}
}
FormChangeable 在 MIT 许可证下。有关更多信息,请参阅 LICENSE 文件。