我试图在按下返回按钮时将我的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
答案 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
在子视图中递归搜索