Pau*_*ris 36 xcode objective-c uitextfield ipad ios4
我有一个iPad应用程序,里面有一个注册表单.表单非常基本,只包含两个UITextField,用于名称和电子邮件地址.
第一个TextField用于候选名称,当他们输入他们的名字并按键盘上的'Next'时,我希望它自动移动到下一个电子邮件地址TextField进行编辑.
知道我怎么能设置键盘的下一个按钮跳转到下一个键盘?
谢谢
law*_*cko 76
您需要将视图控制器设置为UITextField委托,并实现UITextField委托方法:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
if (textField == nameField) {
[textField resignFirstResponder];
[emailField becomeFirstResponder];
} else if (textField == emailField) {
// here you can define what happens
// when user presses return on the email field
}
return YES;
}
Run Code Online (Sandbox Code Playgroud)
Swift版本:
func textFieldShouldReturn(textField: UITextField) -> Bool {
if textField == nameField {
textField.resignFirstResponder()
emailField.becomeFirstResponder()
} else if textField == emailField {
// here you can define what happens
// when user presses return on the email field
}
return true
}
Run Code Online (Sandbox Code Playgroud)
您可能还希望滚动视图以使emailField可见.如果您的视图控制器是UITableViewController的一个实例,这应该会自动发生.如果没有,您应该阅读此Apple文档,尤其是移动位于键盘部分下方的内容.
Pau*_*l.s 10
除了@lawicko的回答之外,我经常更改按钮文本以给出最后的画龙点睛(例如,next当有更多字段时,然后说到done最后一次):
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
BOOL isLastTextField = //.. your logic to figure out if the current text field is the last
if (isLastTextField) {
textField.returnKeyType = UIReturnKeyDone;
} else {
textField.returnKeyType = UIReturnKeyNext;
}
}
Run Code Online (Sandbox Code Playgroud)
Wil*_* T. 10
Swift版的正确答案.
根据我的经验,切换textFields时不需要resignFirstResponder.
在这个例子中,它只是你的基本用户名和密码textFields.
用户名的故事板中的键盘"返回键"设置为"下一步",密码设置为"完成".

然后只需连接这两个文本字段的代理并添加此扩展,您就完成了.
extension LoginViewController: UITextFieldDelegate {
func textFieldShouldReturn(textField: UITextField) -> Bool {
if textField == textFieldPassword {
self.view.endEditing(true)
} else {
textFieldPassword.becomeFirstResponder()
}
return true
}
}
Run Code Online (Sandbox Code Playgroud)
更一致和更健壮的方法是使用NextResponderTextField 您可以完全从界面构建器配置它.
你需要做的就是
UITextField是NextResponderTextField

nextResponderField指向下一个响应者的出口,它可以是UITextField任何子UIResponder类或任何子类.它也可以是一个UIButton,并且该库足够智能,TouchUpInside只有在启用时才触发按钮事件.

这是图书馆的行动:

甲夫特4扩展。只需传递 的数组,UITextFields它就会将每个连接到下一个,直到最后一个退出第一响应者(隐藏键盘):
extension UITextField {
class func connectFields(fields: [UITextField]) {
guard let last = fields.last else { return }
// To reset the targets in case you call this method again to change the connected fields
fields.forEach { $0.removeTarget(nil, action: nil, for: .editingDidEndOnExit) }
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 = .continue
last.addTarget(last, action: #selector(UIResponder.resignFirstResponder), for: .editingDidEndOnExit)
}
}
Run Code Online (Sandbox Code Playgroud)