textFieldShouldReturn无法在swift 3中将焦点从一个文本字段更改为另一个文本字段

时间:2017-01-02 11:44:12

标签: ios swift swift3 uitextfield

我在IOS点击键盘上的下一个按钮但是它无法正常工作时,已经做了一切将焦点从一个textField应用到另一个{

我从布局和代码中为每个textFieldViewController制作代理。 enter image description here

class ViewController: UIViewController, UITextFieldDelegate {

@IBOutlet weak var usernameTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()
    usernameTextField.delegate = self
    passwordTextField.delegate = self

}


func textFieldShouldReturn(textfield: UITextField!) -> Bool
{

    textfield.resignFirstResponder()

    if (textfield == self.usernameTextField) {
        self.usernameTextField.becomeFirstResponder()

    }
    else if (textfield == self.passwordTextField) {
        self.passwordTextField.becomeFirstResponder()

    }

    return true


}

这种情况有什么不对?

4 个答案:

答案 0 :(得分:2)

您正在使用Swift 3并且UITextFieldDelegate方法的签名已更改,因此您需要将_作为第一个参数标签传递。所以你的方法textFieldShouldReturn(_:)应该是这样的。

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
    if (textfield == self.usernameTextField) {
         self.passwordTextField.becomeFirstResponder()
    }
    else {
         textfield.resignFirstResponder()
    }
    return true
}

答案 1 :(得分:0)

如果调用textFieldShouldReturn,那么你必须写成:

if (textfield == self.usernameTextField) 
{
    self. passwordTextField.becomeFirstResponder()
}

答案 2 :(得分:0)

我已根据您的要求更新了

尝试使用:

func textFieldShouldReturn(textfield: UITextField!) -> Bool
{
    if (textfield == self.usernameTextField) {
        self.passwordTextField.becomeFirstResponder()
    }
    else if (textfield == self.passwordTextField) {
        textfield.resignFirstResponder()
    }
    return true
}

keyboard由于呼叫 resignFirstResponder 而被解雇。它与 textFieldShouldReturn 的返回值完全没有关系。这就是为什么需要写满意的条件。

答案 3 :(得分:0)

Try this...

class ViewController: UIViewController, UITextFieldDelegate {
var usernameTextField: UITextField!
var passwordTextField: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()
    usernameTextField.delegate = self
    passwordTextField.delegate = self
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func textFieldShouldReturn(textfield: UITextField!) -> Bool
{

    if (textfield == self.usernameTextField) {
        self.usernameTextField.becomeFirstResponder()

    }
    else if (textfield == self.passwordTextField) {
        self.passwordTextField.resignFirstResponder()

    }

    return true
}

}