2010-02-05 7 views
-1

как изменить изображение, отображаемое для кнопки, когда кнопка находится в другом представлении.Как изменить изображение на кнопку в другом виде

+0

нужно больше подробностей/код примера. –

+0

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

ответ

1

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

1

Не уверен, что я полностью понимаю этот вопрос, но вы передаете информацию между контроллерами представления и их представлением, сохраняя эту информацию в модели данных.

Допустим, у вас есть два вида A и B. Каждый вид будет иметь контроллер вида Ac и Bc. Предположим, вы хотите установить изображение кнопки в B на основе некоторой настройки, которую пользователь вводит в A. Например, в зависимости от того, выбирает ли пользователь самец женского пола на виду A, задняя поверхность кнопки в виде B будет синий или розовый. (... и нет, я не мог придумать лучшего примера, подать в суд на меня.)

Эта информация подпадает под сферу действия модели данных, поскольку настоящая причина, по которой кнопка в B изменит ее фон, связана с некоторыми данные, созданные по выбору пользователя. Модель данных должна находиться в отдельном объекте с любого контроллера вида. Это может быть что угодно: от простого массива до полномасштабного графика данных ядра. Он должен быть спроектирован таким образом, чтобы он ничего не знал о каком-либо интерфейсе.

Объект модели данных должен быть припаркован в некотором месте, к которому контроллеры могут получить к нему доступ. Быстрый и грязный способ заключается в парковке объекта модели данных в делегате приложения. Лучший способ - создать для него синглтон.

Ключевым понятием является то, что вид A и вид B не должны знать о существовании другого. Их соответствующие контроллеры обзора, Ac и Bc, также не должны знать друг о друге. Каждый контроллер просмотра просто записывает/считывает данные в модель данных самостоятельно.

Предположим, ваше приложение собирает данные о человеке, таком как возраст, пол, высота, вес и т. Д., А затем, основываясь на данных, предлагает некоторые варианты пользователю. Предположим, что вид A собирает данные, и на дисплее отображается B. Поток будет идти, как это:

  1. Пользователь вносит изменения в элементы управления в интерфейсе зрения А.
  2. Контроллер Ac считывает эти изменения, такие как пол пользователя, от его вида A.
  3. Контроллер Ac вызывает модель данных и записывает информацию из A в нее.
  4. Контроллер Ac закрывает свое представление и передает управление другому контроллеру.
  5. Любое количество вещей может случиться. Включение приложения для выхода и запуска (если модель данных сохраняется в постоянном хранилище.)
  6. В какой-то момент требуется B. Контроллер Bc, обращается к модели данных и считывает данные с нее. Затем он заполняет/устанавливает пользовательский интерфейс в Bc для соответствия этим данным. В зависимости от пола пользователя, хранящегося в модели данных, он устанавливает изображение кнопки в синий или розовый.

Информационный поток A -> Ac - dataModel -> Bc -> B.

Так вся информация передается между элементами интерфейса в шаблоне проектирования Model-View-Controller, который использует iPhone. Основная идея заключается в том, что контроллеры должны знать только о dataModel и ничего больше. Каждое изменение состояния приложения отражает изменение модели данных.

(Dang, я должен бросить пить так много кофе, прежде чем писать ответы.)

Смежные вопросы