按下返回按钮时在UITextFields之间切换

时间:2018-11-11 19:44:39

标签: ios swift uitextfield uistackview

我试图在按下返回按钮时将我的UITextFields切换到下一个。这是我的代码:

func textFieldShouldReturn(_ textField: UITextField) -> Bool
    {
        // Try to find next responder
        if let nextField = textField.superview?.superview?.viewWithTag(textField.tag + 1) as? UITextField {
            nextField.becomeFirstResponder()
            print("success")
        } else { //if textField.text != nil {
            textField.resignFirstResponder()
            print("error")
    } 
    return false
}

我一直在其他项目中使用此代码。但是,这是一个例外。我将每个元素都放在自己的堆栈视图中,所有这些堆栈视图都在超级视图堆栈视图中。运行该应用程序后,我按返回按钮,然后转到else语句并辞职第一响应者。我需要它来运行nextField.becomesFirstResponder() Here is a screenshot

2 个答案:

答案 0 :(得分:0)

创建插座集合并将每个文本字段连接到它

@IBOutlet var textFields: [UITextField]!

在文本字段委托函数中使用以下命令:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    let nextIndex = textField.tag + 1
    if textFields.count > nextIndex {
        let nextField = textFields[nextIndex]
        nextField.becomeFirstResponder()
    } else {
        textField.resignFirstResponder()
    }
    return false
} 

答案 1 :(得分:0)

解决私人问题

if let nextField = self.view.viewWithTag(textField.tag + 1) as? UITextField 

但是问题在于性能viewWithTag在子视图中递归搜索