Как остановить прикосновения Ended: withEvent: распространять из subView в ViewController?
У меня есть представление, добавляемое как subView viewController. И этот subview, и viewController все реализуют этот метод
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
Я обнаружил, что когда я нажал на subView, оба эти метода будут вызваны. Я хочу назвать подпредставление touchesEnded
только. Как этого добиться? (не добавлять в него жест)
в touchesEnded
Apple Doc говорит следующее: "Если вы переопределяете этот метод без вызова super (шаблон общего пользования), вы также должны переопределить другие методы для обработки сенсорных событий, если только в качестве заглушек (пустых) реализаций".
какой другой метод?
2 ответа
Вы близки!
Чтобы предотвратить передачу события касания в суперпредставление, вы должны переопределить все методы для событий касания. Добавьте все методы сенсорного события в ваше подпредставление, тогда вы должны быть в порядке.
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
}
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
}
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
}
- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
}
Вместо реализации подпредставления touchesDidEnd
почему бы не сделать всю работу в суперпредставлении touchesDidEnd
что-то вроде этого
if([touch anyObject].view == subview){
return;
}
Таким образом, вы сможете узнать, было ли касание изначально из подпредставления или суперпредставления.
Альтернатива: вы можете реализовать оба метода в суперпредставлении и подпредставлении, но, как и в приведенном выше коде, вы можете вернуть вызов в суперпредставлении, если представление, с которым он взаимодействовал, является подпредставлением, и продолжать работать в коде касаний в подпредставлении.
Если, если вы хотите другое мнение, пожалуйста, сообщите нам, что вы пытаетесь, чтобы мы могли дать ответ соответственно