У меня есть UIViewController, вид которого имеет пользовательское подпредставление.
Это пользовательское подпредставление должно отслеживать сенсорные события и сообщать о жестах смахивания.
В настоящее время я помещаю штрихи Beg, touchesMoved, touchesEnded и touchesCancelled в классе subview. С некоторой дополнительной логикой я могу получить жесты и вызвать мои методы handleRightSwipe и handleLeftSwipe. Так что теперь, когда я пролистываю внутри подпредставления, он вызывает свои локальные методы обработки пролистывания. Это все отлично работает.
Но мне действительно нужно, чтобы методы handleRightSwipe и handleLeftSwipe находились в контроллере представления. Я мог бы оставить их в классе подпредставления, но тогда мне нужно было бы также ввести всю логику и данные, и это нарушает идею MVC.
Итак, мой вопрос: есть ли чистый способ справиться с этим? По сути, я хочу сохранить свои методы событий касания в подпредставлении, чтобы они запускались только для этого конкретного представления. Но я также хочу, чтобы контроллер представления был информирован, когда происходят эти сенсорные события (или в этом случае жесты смахивания).
Есть идеи?
Спасибо.
UPDATE:
Используя предложение Хенрика, вот краткий пример того, что я сделал (чтобы спасти вас от чтения):
Я установил свой контроллер вида в качестве наблюдателя уведомлений (в начале).
// NOTIFICATION_LEFT_SWIPE is defined as some unique string elsewhere.
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
// Note that imageView is the instance of my subview that is calling the notification.
// You can set this to nil if you don't want it to be specific.
[nc addObserver:self selector:@selector(handleLeftSwipe) name:@NOTIFICATION_LEFT_SWIPE object:imageView];
Затем я реализую метод handleLeftSwipe. Это будет вызвано при получении уведомления.
Теперь в моем подпредставлении я отправляю уведомление, когда получен жест смахивания:
// Note that NOTIFICATION_LEFT_SWIPE is the same one used in the view controller
// I put this in a global header I use. This is how you keep track of notifications.
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc postNotificationName:@NOTIFICATION_LEFT_SWIPE object:self];
И так же для правого пролистывания.