Как остановить прикосновения Ended: withEvent: распространять из subView в ViewController?

У меня есть представление, добавляемое как subView viewController. И этот subview, и viewController все реализуют этот метод

- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

Я обнаружил, что когда я нажал на subView, оба эти метода будут вызваны. Я хочу назвать подпредставление touchesEnded только. Как этого добиться? (не добавлять в него жест)

в touchesEndedApple 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;
}

Таким образом, вы сможете узнать, было ли касание изначально из подпредставления или суперпредставления.

Альтернатива: вы можете реализовать оба метода в суперпредставлении и подпредставлении, но, как и в приведенном выше коде, вы можете вернуть вызов в суперпредставлении, если представление, с которым он взаимодействовал, является подпредставлением, и продолжать работать в коде касаний в подпредставлении.

Если, если вы хотите другое мнение, пожалуйста, сообщите нам, что вы пытаетесь, чтобы мы могли дать ответ соответственно

Другие вопросы по тегам