Как обнаружить кран на UITextField?

У меня есть UITextField, у которого отключено взаимодействие с пользователем. Поэтому, если вы нажмете на это текстовое поле, ничего не произойдет. Обычно, чтобы проверить, было ли текстовое поле удалено, Id попробуйте методы делегата, но я не могу, потому что пользовательское взаимодействие отключено. Есть ли способ проверить, было ли нажато/коснуто текстовое поле? Я изменяю другой элемент на hidden = no; когда он прослушивается, поэтому мне было интересно, возможно ли даже его возможное взаимодействие с пользователем.

Ответы

Ответ 1

Возможно, вы можете добавить UITapGestureRecognizer в супервизор, определить, находится ли касание внутри фрейма, а затем сделать что-то.

Обнаружение касания, если оно находится внутри рамки супер-представления

  • Создайте UITapGestureRecognizer и добавьте это в супер-представление UITextField.
  • Внедрить целевой селектор и проверить, закончилось ли состояние жестов.
  • Вызовите свой метод.

Objective-C

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didRecognizeTapGesture:)];
[self.textField.superview addGestureRecognizer:tapGesture];


- (void) didRecognizeTapGesture:(UITapGestureRecognizer*) gesture {
    CGPoint point = [gesture locationInView:gesture.view];

    if (gesture.state == UIGestureRecognizerStateEnded) {
        if (CGRectContainsPoint(self.textField.frame, point)) {
            [self doSomething];
        }
    }
}

Swift 3

func viewDidLoad() {
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(didRecognizeTapGesture(_:)))

    textField.superView?.addGestureRecognizer(tapGesture)
}

private dynamic func didRecognizeTapGesture(_ gesture: UITapGestureRecognizer) {
    let point = gesture.location(in: gesture.view)

    guard gesture.state == .ended, textField.frame.contains(point) else { return }

    //doSomething()
}

Ответ 2

Лучший вариант - включить User Interaction и отключить действие редактирования с помощью метода делегата.

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
     return NO;
} 

Вы можете вызвать свой метод внутри этой функции для обнаружения нажатия.