Лучшая практика для манипулирования элементами пользовательского интерфейса в какао - PullRequest
0 голосов
/ 02 февраля 2012

Начну с того, что я новичок в разработке какао. Я также удивлен, что не нашел пост об этом уже, но я просмотрел ряд постов безуспешно.

У меня есть набор элементов, которые должны изменять состояние в зависимости от состояния долгосрочного алгоритма.

По сути, у меня есть кнопка запуска, кнопка отмены и следующая кнопка. Начальным состоянием приложения будет включение кнопки «Пуск», отключение кнопки «Отмена» и «Следующие кнопки». Состояние алгоритма должно быть включено / отключено для всех кнопок в процессе его изменения.

Каждая опция для манипулирования состоянием кнопки, которую я видел, включает в себя кодирование button.enabled в коде контроллера. Я прихожу из ASP .NET MVC, когда погружаюсь в Какао, и это кажется мне обратным. Разве логика представления не должна быть отделена от логики контроллера в образце MVC?

Мне кажется, я должен быть в состоянии выдать пару логических значений в виде IBOutlets, таких как выполнение алгоритма и успех алгоритма, и связать состояние кнопки на уровне представления. Нужно ли бросить эту идею? Или я что-то упускаю из-за версии шаблона проектирования Какао (например, объект, с которым я связываю представление, должен действительно быть моделью представления, взаимодействующей с классом контроллера)? Или, наконец, есть простой способ выполнить то, о чем я говорю, и я просто пропустил это.

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Вам не нужно кодировать включенное состояние кнопки в вашем контроллере. Что вы можете сделать, это объявить свойство BOOL на вашем контроллере, такое как isBusy, а затем установить для этого свойства значение YES, когда вы начинаете длинную операцию, и NO, когда она закончится. Вы должны сделать это, используя методы, совместимые с Key-Value Coding , что, по сути, означает использование метода установки, так что вы, например, вызовете self.isBusy = YES;.

Причина, по которой вы это делаете, заключается в том, что вы можете затем использовать Привязки какао , чтобы установить привязку к элементам управления пользовательского интерфейса. Войдите в инспектор привязок для одной из ваших кнопок и привяжите привязку Enabled к вашему объекту контроллера с помощью ключевого пути isBusy.

При связывании какао используется Наблюдение значения ключа (KVO) для мониторинга значения наблюдаемых свойств. Когда происходит изменение в свойстве isBusy, связанные с ним кнопки будут замечать и изменять свое состояние enabled в ответ.

0 голосов
/ 02 февраля 2012

Возможно, вам не хватает модели делегата Objective-C. В приведенном вами примере вы можете иметь свой объект контроллера, выполняющий алгоритм и обновляющий его статус до его делегата, в данном случае представления.

Т.е. ваш ViewController объект будет вызывать метод doSomething из ProgramController; и когда его более ProgramController вызовет метод somethingDidFinish из его делегата, как определено в вашем протоколе ProgramControllerDelegate)

...