按下 return 按钮时在 UITextFields 之间切换

Switch between UITextFields when return button is pressed

我试图在按下 return 按钮时让我的 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
}

我一直在其他项目中使用此代码。但是,这是一个例外。我在它自己的堆栈视图中拥有每个元素,并且所有这些堆栈视图都在父视图堆栈视图中。一旦我 运行 应用程序,我按下 return 按钮,它会转到 else 语句并让第一响应者辞职。我需要它 运行 nextField.becomesFirstResponder() Here is a screenshot

创建 Outlet Collection 并将每个文本字段连接到它

@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
} 

解决私密问题

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

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