如何处理具有多个视图的文本字段上的返回键

时间:2017-01-30 13:10:07

标签: swift delegates uitextfield

案例

我在一个视图控制器中有3个视图。

始终显示视图1,它将像具有不同UIButton的菜单一样运行。

View 2是登录视图,它将作为登录屏幕。这包含2个UIButtons。 UIButton 1是登录(它将执行函数tryLogin(),见下面的代码),UIButton 2是寄存器(更改视图)。该视图还包含2个文本字段。 textfield 1是电子邮件,textfield 2是密码。视图2是视图1的一半,我告诉用户他们需要登录"解锁"观点1。

View 3是寄存器视图,它将用于注册新用户。它还包含2个UIButtons和2个文本字段。 2个UIButtons是:register(将执行tryMakeAccount())并登录。这两个文本域再次是电子邮件和密码。

我想要什么

当用户在输入电子邮件时按下返回键时,需要转到密码字段。当用户在输入密码时按下返回键时,它需要根据呈现的视图(登录或注册)执行功能。当我只有2个视图(视图1和视图2)时,我已经这样做了。但是使用新视图(视图3),我的代码不再起作用了。如何解决这个问题?

代码

func setTextFieldDelegates() {
    loginEmail.delegate = self
    loginPassword.delegate = self
    registerEmail.delegate = self
    registerPassword.delegate = self
    loginEmail.tag = 0 //This worked well with 2 views
    loginPassword.tag = 1 //This worked well with 2 views
    registerEmail.tag = 0 //What to enter here?
    registerPassword.tag = 0 //What to enter here?
}

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    // Try to find next responder
    if let nextField = textField.superview?.viewWithTag(textField.tag + 1) as? UITextField {
        nextField.becomeFirstResponder()
    } else {
        // Not found, so remove keyboard.
        textField.resignFirstResponder()
        tryLogin() //This should execute when user clicked return key on view 2 (login)
        tryMakeAccount() //this should execute when user clicked return key on view 3 (register)
    }
    return false
}

0 个答案:

没有答案