是否禁用文本框触摸功能,但仍接受编辑?

时间:2019-05-15 19:15:01

标签: ios objective-c swift uitextfield

我的问题与this one相反。

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

2 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:0)

有一个选择.....尝试这个...

    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
    }

要由您决定要禁用还是保留它以启用当前文本字段。

我忘了提到您必须先设置为禁用“用户交互”属性,并且还必须向每个文本字段添加标签