禁用文本字段触摸但仍接受编辑?
Posted
技术标签:
【中文标题】禁用文本字段触摸但仍接受编辑?【英文标题】:Make textfield touch disabled but still accept editing? 【发布时间】:2019-05-15 19:15:01 【问题描述】:我的问题与this one相反。
我有多个文本字段,并且默认情况下将一个文本字段设置为第一响应者,但我不希望他们单击不同的文本视图并手动转到它们。我仍然希望文本字段是可编辑的。有没有办法禁止用户触摸文本字段进行编辑?
【问题讨论】:
【参考方案1】:创建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
【讨论】:
【参考方案2】:有一个选项.....试试这个...
func textFieldShouldReturn(_ textField: UITextField) -> Bool
// Try to find next responder
if let nextField = textField.superview?.viewWithTag(textField.tag + 1) as? UITextField
textField.isUserInteractionEnabled = false
nextField.isUserInteractionEnabled = true
nextField.becomeFirstResponder()
else
// Not found, so remove keyboard.
textField.resignFirstResponder()
// Do not add a line break
return false
如果您想禁用或启用当前文本字段,由您决定。
我忘了说你必须先设置禁用用户交互属性,并为每个文本字段添加标签
【讨论】:
以上是关于禁用文本字段触摸但仍接受编辑?的主要内容,如果未能解决你的问题,请参考以下文章