Лучший способ отправить сообщение в View Controller из глубоко вложенного UIControl? - PullRequest
2 голосов
/ 06 июня 2011

У меня есть следующая структура в моем приложении:

Custom View Controller
 +- Custom View 1
   +- Custom View 2
     +- A number of UIControls

Если пользователь нажимает одну из UIControl s, я хотел бы отправить сообщение на мой контроллер пользовательского представления.

В настоящее время я вижу два решения для этого:

  1. Расскажите 1-му пользовательскому представлению о контроллере, затем также расскажите 2-му пользовательскому представлению о нем и установите цель и действие при создании 'UIControl годов.(Мои пользовательские представления могут иметь -initWithFrame: controller: метод или что-то в этом роде)
  2. UIControl может отправить NSNotification (возможно, с некоторым userInfo), который наблюдает мой контроллер.

Я склоняюсь к варианту 2, потому что мне не нравится рассказывать Custom View 1 о моем контроллере, просто чтобы он мог рассказать о нем Custom View 2.

Каковы плюсы и минусы двух моих решений, илиЕсть ли другой способ сделать это?

Обновление : я пошел с NSNotification на данный момент.

Ответы [ 2 ]

1 голос
/ 13 марта 2014

Существует несколько возможностей, но наилучшая действительно зависит от вашего конкретного бизнес-кейса и целей нескольких вложенных подклассов UIView.

  1. Присвойте значение свойству tag элемента управления,затем получите доступ к нему с помощью viewWithTag: из контроллера представления при настройке событий target-action.
  2. Предоставьте открытые средства доступа в каждом подклассе UIView для каждого подпредставления, затем получите доступ к элементу управления из контроллера представления, используя эти свойства.
  3. Используйте цепочку респондента.Укажите nil target при настройке target-action элемента управления, и в конечном итоге действие будет отправлено в контроллер представления, если он его реализует.
  4. В зависимости от природы ваших подклассов UIView, может быть лучше реализовать любойнеобходимые обратные вызовы к контроллеру представления через протокол делегирования представления.Таким образом, target-action элемента управления будет назначаться содержащим его подклассом UIView, а в своем обработчике он будет вызывать собственный метод делегата.
1 голос
/ 06 июня 2011

Как насчет того, чтобы сохранить указатель на Custom View Controller от делегата приложения и представить его как свойство.

Затем вы можете использовать статическое sharedApplication сообщение на UIApplication, чтобы получить к вашему приложению делегат и соответствующее свойство:

// in custom view 2 code ...
YourApplication * app = (YourApplication*)[UIApplication sharedApplication];
CustomViewController * cvc = app.customViewController;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...