我有一个使用Swift和iOS8构建的应用程序。在我ViewController
我有两个文本域。
我使用此代码:
func textFieldShouldReturn(textField: UITextField) -> Bool {
if textField == self.textfield_A {
self.textfield_B.becomeFirstResponder()
}
if textField == self.textfield_B {
self.textfield_B.resignFirstResponder()
}
return true
}
效果:
我选择textfield_A
并按下一步按钮 - >光标跳转到textfield_B
在textfield_B
上按完成按钮 - >键盘将被隐藏。
一切正常。
但是现在我做了一个改变,代码不再这样了。
我将textfield_A
更改为textView
。
知道如何修改我的代码吗?
答案 0 :(得分:8)
您必须添加扩展名,这是swift 3.0
的扩展名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 = .done
last.addTarget(last, action: #selector(UIResponder.resignFirstResponder), for: .editingDidEndOnExit)
}
}
并在添加以下代码后:
UITextField.connectFields(fields: [field1, field2, field3])
答案 1 :(得分:4)
textFieldShouldReturn
现在不再为textfield_A调用了,因为现在是textview,而不是textfield。
尝试添加此功能
func textView(textView: UITextView!, shouldChangeTextInRange: NSRange, replacementText: NSString!) -> Bool {
if(replacementText == "\n") {
textView.resignFirstResponder()
return false
}
return true
}
答案 2 :(得分:1)
如果你同时使用两个文本字段,那么下面的代码可能会对你的朋友有帮助
确保您的文本字段设置了其委托并实现了textFieldShouldReturn方法。这是当用户点击返回键时调用的方法(无论它看起来如何)。
该方法可能如下所示:
func textFieldShouldReturn(textField: UITextField) -> Bool {
if textField == self.field1 {
self.field2.becomeFirstResponder()
}
return true
}
不要忘记给代表
TextField.delegate = self
答案 3 :(得分:0)
使用textField
,您可以使用textFieldShouldReturn:
方法检测返回键按下。 textView
是一个多行输入,因此返回键只是添加一个新行,因此捕获返回键的最简单方法是实现UITextViewDelegate
方法:
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
if text == "\n" {
textView.resignFirstResponder()
return false
}
return true
}
答案 4 :(得分:0)
你可以在doneButton动作中这样做:
@IBAction func donePressed(sender: AnyObject) {
if textV.resignFirstResponder() { //check if cursor is at textView.
textfield_B.becomeFirstResponder() //move it to your next textField.
} else {
textfield_B.resignFirstResponder() //else hide your keyboard.
}
}
你的结果将是:
希望它有所帮助。
答案 5 :(得分:0)
Swift 4.2
这是一个更通用的解决方案,您可以将此代码与任意数量的TextField结合使用。 只需继承 UITextFieldDelegate 并根据顺序
更新 Textfield标签func textFieldShouldReturn(_ textField: UITextField) -> Bool {
let txtTag:Int = textField.tag
if let textFieldNxt = self.view.viewWithTag(txtTag+1) as? UITextField {
textFieldNxt.becomeFirstResponder()
}else{
textField.resignFirstResponder()
}
return true
}