2016-07-29 4 views
0

Следующие UIResponder методы сообщают сырые штрихи на экране:Выполняет ли приведение методов UIResponder в подкласс UIView нарушать MVC?

- touchesBegan:withEvent: 
- touchesMoved:withEvent: 
- touchesEnded:withEvent: 

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

Первоначально я реализовал методы выше в UIViewController, которые отвечали за рассматриваемое представление.

Однако я понял, что методы касания вызывались всякий раз, когда рассматривалось представление UIViewControllers, а не подзаголовок, который я хотел.

Я переопределял методы внутри подкласса UIView, и все работало должным образом.

Однако я чувствую, что это нарушает MVC. У меня есть логика управления внутри моего представления.

Должен ли я держать методы, реализованные внутри UIViewController вместо этого, и как-то хита теста интерпретировать, какое представление было потрогать, или я исправить в том, методах, реализуемые внутри UIView подкласса?

Я чувствую, что более поздний - это ленивый выход.

Спасибо за ваше время.

+0

Вы должны переопределить его в представлении. Как еще ваше мнение может быть повторно использовано? Вам не нужно реализовывать сенсорную обработку для 'UIButton' в каждом контроллере представления, который имеет один, он реагирует на сами события касания. – dan

+0

Не нарушает ли это MVC? – Woodstock

+3

Вы можете определенно сделать что-то внутри методов, которые нарушают MVC, но переопределение их не нарушает MVC сам по себе. 'UIView' является подклассом' UIResponder' по какой-то причине. – dan

ответ

1

В MVC представление отвечает за взаимодействие пользователя. Поэтому имеет смысл использовать методы UIResponder, переопределенные в вашем UIView. Чтобы строго следовать MVC, вы должны использовать delegate pattern (или какой-либо другой шаблон) для вызова функций логики управления, которые находятся в вашем контроллере.

enter image description here

выше изображение из (Apple's MVC documentation). Часть, относящаяся к вашему вопросу, находится в левом верхнем углу. Представление должно сказать контроллеру, что он был затронут ect, и контроллер должен выполнить логику.

UIViewController способен реализовать эти методы только потому, что он имеет встроенный вид. Это сбивает с толку, потому что это означает, что сам UIViewController нарушает MVC, но это более активное обсуждение.

+0

интересно, спасибо за ответ. Так должен ли мой UiView делегировать это обновление центральной точки обратно в UIViewController? – Woodstock

+0

Не зная специфики, мне трудно дать вам отличный ответ, но, вероятно, нет. Вы должны спросить себя, что действительно должен контролировать viewController. Мое предположение, что вы могли бы передать что-то более общее. При этом мне кажется, что сложно построить какой-либо значительный проект, в котором есть только MVC, а иногда и для небольших проектов, не стоит времени делать все правильно.Как только вы начнете строить, вы в конечном итоге столкнетесь с проблемами, которые продемонстрируют, почему важно использовать определенные шаблоны проектирования, и это более осмысленный способ обучения. – CarlNathan

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