как получить uiview, чтобы поговорить с контроллером - PullRequest
2 голосов
/ 25 февраля 2011

Я относительно новичок в Objective-C и Какао ... Я давно пытаюсь понять, как правильно реализовать шаблон MVC в Cocoa / Cocoa Touch ... Я понимаю идею, стоящую за этим;концептуально это имеет смысл: модель содержит данные, представление - это то, что пользователь видит и может взаимодействовать, а контроллер действует как мост между ними.Представление не может общаться с моделью, модель не может общаться с представлением.Понял.

Что для меня не имеет смысла, так это то, как эффективно использовать MVC… если пользователь может взаимодействовать только с представлением и что-то делает с ним (например, для приложения iPhone, пользовательщелкает / перетаскивает в подклассе UIView, вызывая методы "touchesBegan" и "touchesMoved" и т. д.), как представление передает эти события контроллеру?

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

Заранее благодарен за любые предложения относительно того, что делать или где искать.

1 Ответ

1 голос
/ 25 февраля 2011
  1. Стандартным способом сделать это в Какао является шаблон делегата (см. UITableViewDelegate). Ваш класс представления объявляет протокол делегата, а контроллер устанавливает себя в качестве делегата представления. Затем представление вызывает один из методов делегата, который вы определили, всякий раз, когда он хочет что-то сообщить контроллеру.

  2. Альтернативой может быть реализация механизма целевого действия для вашего взгляда самостоятельно. Вы получаете это более или менее бесплатно, если вы подкласс от UIControl (просто позвоните sendActionsForControlEvents:), но довольно легко реализовать систему, которая работает так же для любого пользовательского класса.

  3. (Редактировать: я полагаю, что третий способ - заставить контроллер наблюдать свойства представления (с помощью KVO). Это не очень хорошо работает для передачи событий касания, но это выполнимый способ, если вы хотите уведомить контроллер об изменении состояния или что-то в этом роде.)

...