2009-10-22 3 views
2

Я довольно новичок в разработке iPhone, и мне интересно, как загрузить несколько видов из одного контроллера.iPhone Один контроллер, несколько видов

Я родом из C# фона и все еще пытаюсь понять, как все работает в ObjC и iPhone мирах.

В качестве базового примера того, чего я пытаюсь достичь, скажем, у меня есть ClockController, контроллер часов имеет базовые методы для вычисления времени.

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

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

Как добиться этого?

Извините, если это очень простой вопрос, но я совершенно новый.

Заранее спасибо

ответ

2

Вот мое понимание того, как применять MVC для вашего примера:
часов, которые вы рисуете на экране находитесь внутри взгляды, которые каждый опираются на экземпляр вашего тактового класса контроллера представления , Эти контроллеры каждый взаимодействуют с моделью часов и, при необходимости, обновляют свои представления. Именно в этом классе будет установлено свойство, определяющее, является ли часы цифровыми или аналоговыми.
Похоже, ваш «ClockController» - действительно модель/класс данных. У вас может быть только один экземпляр этого класса модели или один для каждого из ваших контроллеров часов (если они имеют разные времена).

1

В моих приложениях у меня есть много экземпляров одного контроллера вида, который затем использует разные или несколько видов для отображения пользовательского интерфейса. Вы можете просмотреть представление и все его дочерние объекты и добавить его в контроллер вида с помощью addSubView и удалить это представление и все его подпрограммы с помощью removeFromSuperview. Это хорошо работает, если представление только отображает информацию и подклассифицировано для обработки своих отличий от других представлений, которые должен обрабатывать контроллер представления. В вашем случае аналоговое представление часов должно рисоваться в одну сторону, а цифровое представление часов - в другом. Контроллер просто должен сказать каждому виду, что такое время, и представление обрабатывает перевод на визуальные данные. Если ваше представление принимает вход в виде пользователя, перетаскивая аналоговые руки для установки будильника, то подкласс класса должен прочитать этот ввод, а затем перевести на время будильника и передать его обратно в контроллер вида. Контроллер не должен знать, с каким типом часов пользователь взаимодействует, но видит только время будильника, которое ему нужно добавить в свою очередь.

Однако, когда у меня есть представления, в которых используются очень разные пользовательские интерфейсы или для разных целей, я обычно предпочитаю иметь один контроллер представления для набора представлений. В принципе, я пытаюсь использовать свои представления в качестве дисплея, а мои viewControllers - как диспетчер данных, связанных с этим представлением (и любые другие представления, которые могут поддерживаться этими же данными).

Например, в моей игре есть один контроллер для воспроизведения, другой для таблицы с высоким рейтингом и еще один для настроек.

+0

Прохладный! Спасибо за объяснение, ребята. Это только подтвердило мои идеи. Спасибо за ссылку addSubView, я буду проверять doco для использования. Я думаю, что моя главная задача будет привыкать к тому, как все держится вместе ... плюс научиться быть бдительным очисткой этих ресурсов ;-) –