Swift 4:空白UITextField按退格跳转至前一个及隐藏光标方法
UITextField 两个常见问题的解决方案
嘿,这两个UITextField的需求我之前开发时也碰到过,给你整理了具体的实现方案:
1. 空输入框按退格跳转到前一个输入框
要实现这个逻辑,咱们可以借助UITextFieldDelegate的textField(_:shouldChangeCharactersIn:replacementString:)方法判断退格操作,再结合输入框的顺序数组定位前一个输入框。
步骤:
- 把所有需要跳转的UITextField按顺序存到一个数组里(可以在Storyboard拖拽连线,或者代码中手动添加);
- 实现代理方法,当用户按下退格(
replacementString为空)且当前输入框文本为空时,找到数组中的上一个输入框并让它成为第一响应者。
代码示例:
// 声明按顺序排列的输入框数组 @IBOutlet var textFields: [UITextField]! // 设置代理(可在viewDidLoad或Storyboard中设置) override func viewDidLoad() { super.viewDidLoad() textFields.forEach { $0.delegate = self } } // 实现代理方法 extension YourViewController: UITextFieldDelegate { func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { // 处理退格跳转逻辑 if string.isEmpty { // 退格操作判断:替换字符串为空 guard let currentText = textField.text, currentText.isEmpty else { // 当前输入框有内容,正常执行退格 return true } // 当前输入框为空,跳转至前一个输入框 if let currentIndex = textFields.firstIndex(of: textField), currentIndex > 0 { let previousTextField = textFields[currentIndex - 1] previousTextField.becomeFirstResponder() return false // 阻止默认退格操作(当前已为空) } } else { // 保留你的正向跳转逻辑(比如输入满1位跳转到下一个) if let currentText = textField.text, currentText.count + string.count == 1 { if let currentIndex = textFields.firstIndex(of: textField), currentIndex < textFields.count - 1 { let nextTextField = textFields[currentIndex + 1] nextTextField.becomeFirstResponder() } } } return true } }
2. 去除UITextField的闪烁蓝线(光标)
有两种常用实现方式,你可以根据需求选择:
方式一:设置光标颜色为透明(简单快速)
直接把UITextField的tintColor设为透明色,光标就会隐形:
// 单个输入框设置 yourTextField.tintColor = .clear // 批量设置(比如你的textFields数组) textFields.forEach { $0.tintColor = .clear }
这种方式无需自定义类,后续随时可以通过修改tintColor恢复光标。
方式二:自定义UITextField彻底隐藏光标
如果需要完全移除光标(连底层绘制都取消),可以自定义一个UITextField子类,重写caretRect(for:)方法返回空矩形:
class NoCursorTextField: UITextField { override func caretRect(for position: UITextPosition) -> CGRect { // 返回空矩形,不再绘制光标 return .zero } }
之后在Storyboard中把对应UITextField的Class改成NoCursorTextField,或者代码中初始化这个子类即可。
内容的提问来源于stack exchange,提问作者Box House
相关产品推荐
相关产品推荐

