多UITextField场景下如何仅点击底部输入框时上移视图避免键盘遮挡
你只需要做三处修改即可实现需求:
- 新增属性记录当前激活的输入框
在你的视图控制器类中新增如下属性:
var activeTextField: UITextField?
- 实现输入框开始编辑的代理方法
添加UITextField的代理方法,记录当前正在编辑的输入框:
func textFieldDidBeginEditing(_ textField: UITextField) { activeTextField = textField }
- 修改键盘状态变化的处理逻辑
把原来的keyBoardWillChange方法替换为如下实现:
@objc func keyBoardWillChange(notification: Notification) { // 键盘收起时统一将视图复位 if notification.name == UIResponder.keyboardWillHideNotification { view.frame.origin.y = 0 return } // 校验当前激活的输入框是否为需要上移视图的三个输入框 guard let currentField = activeTextField, [txtPin, txtPhone, txtEmail].contains(currentField) else { // 非目标输入框触发键盘弹出,视图保持原位 view.frame.origin.y = 0 return } // 符合条件时上移视图 view.frame.origin.y = -250 }
可选优化
你原有的textFieldShouldReturn方法中不需要批量让所有输入框失去第一响应者,直接处理当前触发返回事件的输入框即可:
func textFieldShouldReturn(_ textField: UITextField) -> Bool { print("Return Tapped") textField.resignFirstResponder() return true }
内容的提问来源于stack exchange,提问作者Ahana
相关产品推荐
相关产品推荐

