首页 > 解决方案 > 禁用文本字段触摸但仍接受编辑?

问题描述

我的问题与这个问题相反。

我有多个文本字段,并且默认情况下将一个文本字段设置为第一响应者,但我不希望他们单击​​不同的文本视图并手动转到它们。我仍然希望文本字段是可编辑的。有没有办法禁止用户触摸文本字段进行编辑?

标签: iosobjective-cswiftuitextfield

解决方案


创建一个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
    }
}

推荐阅读