如何使用 iPhone 键盘上的“下一步”按钮浏览所有文本字段?
最后一个文本字段应关闭键盘。
我已经设置了 IB 按钮(下一步/完成),但现在我陷入困境。
我实现了 textFieldShouldReturn 操作,但现在“下一步”和“完成”按钮关闭了键盘。
在 Mac OS X 的 Cocoa 中,您有下一个响应者链,您可以在其中询问文本字段接下来应该获得哪个控件的焦点。这就是文本字段之间的制表符起作用的原因。但由于 iOS 设备没有键盘,只有触摸,所以这个概念在向 Cocoa Touch 的过渡中并没有延续下来。
无论如何,这可以很容易地完成,有两个假设:
- 所有“可选项”
UITextField
s 位于同一父视图上。
- 它们的“制表符顺序”由标签属性定义。
假设你可以重写 textFieldShouldReturn: 如下:
-(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];
} else {
// Not found, so remove keyboard.
[textField resignFirstResponder];
}
return NO; // We do not want UITextField to insert line-breaks.
}
添加更多代码,假设也可以忽略。
斯威夫特4.0
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
let nextTag = textField.tag + 1
// Try to find next responder
let nextResponder = textField.superview?.viewWithTag(nextTag) as UIResponder!
if nextResponder != nil {
// Found next responder, so set it
nextResponder?.becomeFirstResponder()
} else {
// Not found, so remove keyboard
textField.resignFirstResponder()
}
return false
}
如果文本字段的超级视图是 UITableViewCell 那么下一个响应者将是
let nextResponder = textField.superview?.superview?.superview?.viewWithTag(nextTag) as UIResponder!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)