2015-04-11 3 views
1

У меня есть пользовательский интерфейс с несколькими элементами, некоторые из которых я хотел бы инкапсулировать в свои собственные объекты. Например, один объект будет таймер (в основном только UILabel сидит в UIView) с внешне доступными членами:Использовать UIView или UIViewController для объекта таймера?

  • startTime (недвижимость)
  • start и pause (методы)

(И также im_done NSNotification, когда таймер достигает 0.) Этот объект и несколько других будут использоваться вместе в одном UIViewController.

Может ли UIView или UIViewController быть более подходящим для подкласса для объекта таймера (и всех остальных)? Чтение this answer заставляет меня верить UIView, но для моего конкретного случая (особенно для более сложных объектов) я не уверен. Спасибо за прочтение.

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

+1

Я бы рекомендовал подклассифицировать UIView, а не UIViewController. –

+0

@Sean Спасибо за комментарий. Просто чтобы убедиться, что я понимаю, ваше предложение поместить все внутренние работы моего таймера (объект NSTimer и т. Д.) В этот подкласс UIView? – Rogare

ответ

3

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

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

+0

Спасибо за ответ. Означает ли это, что класс 'MyTimer' является, по сути, контроллером представления? – Rogare

+0

нет, не контроллер просмотра, просто контроллер (простой объект с распределенной ответственностью). он не имеет понятия представления, он просто управляет временем – Wain

+0

ОК, поэтому код, отвечающий за изменение UILabel таймера, останется в моем главном контроллере? – Rogare

0

Это, я думаю, относится к предпочтению. Вы будете включать uiview и uiviewcontroller в родительском контроллере представления по-разному, и эта разница может затруднить работу с uiviewcontroller, если вы не понимаете контейнеры. Я бы сказал, что лучшая практика будет в uiviewcontroller, но это действительно зависит от вас.

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