ios - 按下返回按钮时在 UITextField 之间切换
问题描述
当按下返回按钮时,我试图让我的 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()
这里是一个截图
解决方案
创建 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
}
推荐阅读
- html-framework-7 - Framework7 在更改前进行确认切换
- .net - 网站访问所花费时间的正确值
- c# - 无法从 C# 应用程序连接到远程 SQL Server 实例
- javascript - 如何使用 javascript 将文本附加到选择选项文本的末尾?
- macos - 受信任的根证书不受信任
- python - 拆分数组并将第一部分添加到末尾
- excel - 在 VBA 中合并多行
- php - Wordpress admin-ajax.php 400 加载失败
- java - 试图通过 Android 中通过 Firebase 填充的两个 ArrayList
- sql - 获取postgresql中时间冲突的列