Сделать текстовое поле сенсорным, но вы все еще принимаете редактирование? - PullRequest
0 голосов
/ 15 мая 2019

Мой вопрос противоположен этому .

У меня несколько текстовых полей, и я по умолчанию задаю одно текстовое поле, чтобы оно отвечало первым, но я не хочу, чтобы они нажималина разных видах текста и переходя к ним вручную.Я все еще хочу, чтобы текстовые поля были редактируемыми.Есть ли способ запретить пользователю прикасаться к текстовому полю для редактирования?

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Создайте 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
    }
}
0 голосов
/ 15 мая 2019

есть вариант ..... попробуйте это ...

    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
    }

Вам решать, хотите ли вы отключить или оставить активным текущее текстовое поле.

Я забыл упомянуть, что сначала нужно отключить свойство взаимодействия с пользователем и добавить теги в каждое текстовое поле

...