Уведомление контроллера представления, когда сенсорные события подпредставления имеют место

У меня есть UIViewController, представление которого имеет пользовательское подпредставление.

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

В настоящее время я помещал touchesBegan, touchesMoved, touchesEnded и touchesCancelled в классе подпредставления. С некоторой дополнительной логикой я могу получить жесты сильного удара и назвать мой handleRightSwipe и handleLeftSwipe методы. Таким образом, теперь, когда я сильно ударяю в рамках подпредставления, оно называет свои локальные методы обработки сильного удара. Это все хорошо работает.

Но то, в чем я действительно нуждаюсь, для handleRightSwipe и handleLeftSwipe методов, чтобы быть в контроллере представления. Я мог оставить их в классе подпредставления, но затем я должен буду ввести всю логику и данные также и такие повреждения идея MVC.

Таким образом, мой вопрос существует ли очевидный способ для обработки этого? По существу я хочу сохранить свои сенсорные методы события в подпредставлении так, чтобы они только инициировали для того определенного представления. Но я также хочу, чтобы контроллер представления был информирован, когда эти сенсорные события (или в этом сильном ударе случая жесты) имеют место.

Какие-либо идеи?

Спасибо.

ОБНОВЛЕНИЕ:

Используя предложение Henrik, вот быстрый образец того, что я сделал (для сохранения Вас чтение):

Я установил свой контроллер представления как наблюдатель уведомлений (вначале).

// 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]; 

И так же для правильного сильного удара.

1
задан nebs 16 June 2010 в 20:30
поделиться

2 ответа

Вы можете использовать Центр уведомлений для отправки уведомлений различным (наблюдающим) объектам.

1
ответ дан 2 September 2019 в 23:44
поделиться

Вы могли бы также использовать систему распознавателя жестов, которая доступна в OS 3.2 и более поздних версиях; распознаватели жестов позволяют вам отделить обработку касаний от ваших классов представления, и предназначены для практически точно такой вещи, которую вы делаете здесь. В этом случае вы создадите экземпляр UIPanGestureRecognizer, добавите ваш контроллер в качестве цели распознавателя (используя обычный синтаксис -addTarget:action:), затем добавите распознаватель в ваше представление с помощью -addGestureRecognizer:. Тогда ваш контроллер будет получать серию сообщений о действиях, вызываемых по мере того, как пользователь проводит пальцем по представлению, и сможет проверить движение, вызвав метод распознавателя -translationInView:.

1
ответ дан 2 September 2019 в 23:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: