У меня есть UITextField, у которого отключено взаимодействие с пользователем. Поэтому, если вы нажмете на это текстовое поле, ничего не произойдет. Обычно, чтобы проверить, было ли текстовое поле удалено, Id попробуйте методы делегата, но я не могу, потому что пользовательское взаимодействие отключено. Есть ли способ проверить, было ли нажато/коснуто текстовое поле? Я изменяю другой элемент на hidden = no; когда он прослушивается, поэтому мне было интересно, возможно ли даже его возможное взаимодействие с пользователем.
Как обнаружить кран на UITextField?
Ответ 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;
}
Вы можете вызвать свой метод внутри этой функции для обнаружения нажатия.