Q1. для приведенного выше сценария все же лучше (хорошая практика) создать отдельное представление (представление, отличное от представления контроллера представления)? Если так, то почему?
Если вы создаете свое представление с помощью Interface Builder, я думаю, что это отдельное представление. ;) Но если вы попытаетесь создать иерархию представлений программно, не используя n / xib, вы можете поместить все макеты представлений в метод loadView
и заполнить данные в viewDidLoad
, что и делает View-Controller
. Кроме того, вы можете создать класс UIView
для реализации макета представления, как n / xib, но программно.
Как сказал DOC,
... Можно объединить роли MVC, которые выполняет объект, например, заставить объект выполнять роли контроллера и представления - в этом случае он будет называться контроллером представления. ...
... Контроллер вида - это контроллер, который в основном относится к слою вида. «Владеет» интерфейсом (представлениями); его основные обязанности состоят в том, чтобы управлять интерфейсом и связываться с моделью. Методы действия, связанные с данными, отображаемыми в представлении, обычно реализуются в контроллере представления. NSWindowController объект (также часть архитектуры документа) является примером контроллера представления. ...
MVC в Какао немного отличается от того, что вы знаете. Вы можете сослаться на официальный документ ЗДЕСЬ .
Q2. Кроме рисования и отображения представления (в моем проекте его немного), что еще должен содержать код реализации представления?
Вы можете настроить вид, например, установить цвет текста или стиль шрифта для своей кнопки и т. Д.
Q3.a. Поэтому я должен поместить эту логику отключения некоторых кнопок в реализацию отдельного представления (представление, созданное в вопросе 1)
Лучше поместить логику в контроллер (или view-controller), как предпочитают MVC.
Q3.b. Могу ли я создать выходы для кнопок (которые являются подпредставлениями), чтобы отключить некоторые кнопки из моего родительского представления (представление, созданное в вопросе 1)? Я не могу этого сделать. Или я должен использовать метод subviews и перебрать нужную кнопку?
Вы можете установить тег (setTag:
) для своих кнопок и получить нужный вам. Но имейте в виду, во-первых, вам нужно разрешить показанную кнопку родителю.