Swift中如何实现填字游戏网格UITextField的第一响应者向右切换?
填字游戏输入框自动切换到右侧的解决方案
嘿,我来帮你搞定这个填字游戏的输入框切换问题!你现在遇到的核心问题是UITextField本身并没有index这个属性,直接调用textField.index肯定会报错。咱们一步步来修正实现:
第一步:做好基础配置
首先,你的视图控制器要遵守UITextFieldDelegate协议,并且给boxArray里的每一个UITextField都设置好delegate。另外建议把boxArray改成非可选类型[UITextField]——初始化时确保所有100个输入框都被正确创建并加入数组,这样后续操作不用反复解包,更省心。
第二步:修正textFieldShouldReturn方法
这里的关键是正确获取当前输入框在数组中的索引,然后计算右侧输入框的索引并切换第一响应者。下面是完整的实现代码:
class CrosswordViewController: UIViewController, UITextFieldDelegate { // 用非可选数组存储所有输入框,初始化时确保填满100个 var boxArray: [UITextField] = [] override func viewDidLoad() { super.viewDidLoad() // 假设这里是你创建100个UITextField并添加到视图、boxArray的代码 for textField in boxArray { textField.delegate = self // 可选:设置输入框只允许单个字符,更符合填字游戏需求 textField.maximumCharactersLimit = 1 textField.keyboardType = .default // 可选:添加自动切换逻辑(输入一个字符后自动跳转到下一个) textField.addTarget(self, action: #selector(onTextChanged), for: .editingChanged) } } func textFieldShouldReturn(_ textField: UITextField) -> Bool { // 1. 获取当前输入框在数组中的索引 guard let currentIndex = boxArray.firstIndex(of: textField) else { textField.resignFirstResponder() return true } // 2. 计算右侧输入框的索引,注意不能超出数组范围(最大索引99) let nextIndex = currentIndex + 1 guard nextIndex < boxArray.count else { // 已经是最后一个输入框,直接收起键盘 textField.resignFirstResponder() return true } // 3. 切换到右侧的输入框 let nextTextField = boxArray[nextIndex] textField.resignFirstResponder() nextTextField.becomeFirstResponder() return true } // 可选:输入单个字符后自动触发切换逻辑 @objc private func onTextChanged(_ textField: UITextField) { if let text = textField.text, text.count == 1 { _ = textFieldShouldReturn(textField) } } }
额外优化建议
- 如果你的填字游戏是10x10的网格,当前逻辑中“右侧”就是索引+1,比如第一行最后一个输入框(索引9)的右侧是第二行第一个(索引10),完全符合填字游戏的横向输入逻辑。
- 若要兼容iOS 16以下版本限制单个字符输入,可以替换成这个方法:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { guard let currentText = textField.text else { return true } let newLength = currentText.count + string.count - range.length return newLength <= 1 }
内容的提问来源于stack exchange,提问作者alexstrasza
相关产品推荐
相关产品推荐

