Swift下一个按钮更改文本字段

时间:2015-08-22 06:43:07

标签: ios swift textview

我有一个使用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

知道如何修改我的代码吗?

6 个答案:

答案 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.
    }
}

你的结果将是:

enter image description here

希望它有所帮助。

答案 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
}