ios - 禁用文本字段触摸但仍接受编辑?
问题描述
我的问题与这个问题相反。
我有多个文本字段,并且默认情况下将一个文本字段设置为第一响应者,但我不希望他们单击不同的文本视图并手动转到它们。我仍然希望文本字段是可编辑的。有没有办法禁止用户触摸文本字段进行编辑?
解决方案
创建一个UITextField
子类并覆盖hitTest point
方法并返回nil
class CustomTextField: UITextField {
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
return nil
}
}
在视图控制器中使用自定义类。在第一个文本字段中viewDidAppear
使用becomeFirstResponder
,在textFieldShouldReturn
方法中移动到下一个文本字段。确保将委托设置为所有文本字段。
class ViewController: UIViewController, UITextFieldDelegate {
let textField1 = CustomTextField()
let textField2 = CustomTextField()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
textField1.delegate = self
textField1.returnKeyType = .next
view.addSubview(textField1)
textField2.delegate = self
textField2.returnKeyType = .send
view.addSubview(textField2)
//add constraints or set frame
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
textField1.becomeFirstResponder()
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == textField1 {
textField2.becomeFirstResponder()
}
return true
}
}
推荐阅读
- arrays - PyPNG 无法使用 32 位数组输入制作图像
- mapbox - 在 Mapbox GL JS 中覆盖 GeoTIF 的主要问题
- variables - 应该知道哪些 Cmake 变量的含义?
- linux - 在 Azure Cloud Shell 中指定 SSH 私钥
- python - 地理姜戈。管理员未在创建的实例中显示 point = models.PointField() 的地图位置
- angularjs - AngularJS:ng-repeat 不显示数据(混合 Django 和 Angular 模板表达式)
- java - 为什么我会得到这个错误的输出?
- html - 未找到列:1054 字段列表中的未知列“0”
- javascript - Jquery如何将li行中的第一个按钮聚焦在keydown上
- c# - if条件语句中的C#空传播运算符