Присоединение распознавателей жестов / методов действия к представлениям нарушает модель контроллера вида? - PullRequest
6 голосов
/ 28 октября 2011

Хотел спросить мнение людей по этому поводу.У меня есть подкласс uiimageview, и в его инициализатор я добавляю некоторые средства распознавания жестов в представление изображений, а также включаю методы делегата распознавателя жестов в класс.Мой вопрос, это нарушает модель представления контроллера?Должен ли весь код, связанный с управлением представлением, находиться в контроллере представления?То же самое с, скажем, положить метод действия кнопки в представлении.Во всяком случае, интересно услышать мнения.

Ответы [ 3 ]

5 голосов
/ 28 октября 2011

В некотором смысле, да, это нарушает схему MVC. Как вы говорите, представление не должно иметь ничего общего с тем, как им управлять, лучше использовать такой код в другой части приложения.

Кроме того, одним из значительных преимуществ ООП является возможность повторного использования классов. Представления как таковые могут быть повторно использованы без каких-либо проблем, поскольку весь управляющий код, специфичный для приложения, отсутствует в них. Если вы включите методы делегата в свое представление, вы не сможете использовать его повторно, или вам придется каждый раз менять метод делегата!


Но правила для общего случая. Взгляните на платформу Cocoa для Mac OS X: у вас есть привязки какао, которые позволяют вам напрямую изменять содержимое представления в ответ на изменение данных в вашей модели. Это также некоторым образом нарушает шаблон MVC.

Еще один пример, см. UIViewController. Это должен быть контролер, но он настолько тесно связан с мнением, что вопрос остается. Разделение между view и controller не так явно, как хотелось бы MVC.


В заключение, я бы сказал, что это хорошая привычка следовать шаблону (если он соответствует вашим потребностям) и тому, как вы можете следовать ему, используя данную структуру. Но в некоторых случаях, если вы сделаете это явно, было бы интересно создать ярлык и нарушить правила.

2 голосов
/ 28 октября 2011

Похоже, что это очень хорошая идея, если действие повлияет только на внешний вид.Например, присоединение распознавателя жестов панорамирования к представлению для его перетаскивания кажется хорошей идеей.

Однако, если это вызовет более широкие эффекты в вашем приложении, это, вероятно, не правильный подход.

0 голосов
/ 15 ноября 2014

Документ Apple по основным компетенциям разработчика Apple (https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html):

)

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

Лично я бы истолковал это как означающее, что можно нормально писать распознаватели жестов в классе представления, при условии, что этот жест позволяет представлению «отвечать на действия пользователя».

Существует также некоторый прецедент в API Apple, поскольку некоторые потомки UIView (например, UIButton) могут распознавать жесты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...