MVC: Где загрузить просмотры? - PullRequest
1 голос
/ 13 июня 2009

У меня относительно простое приложение. У меня есть полноэкранный подкласс UIView (musicGridView), с которым взаимодействует пользователь, и подкласс UIScrollView (scrollView), который загружает этот класс, а также ViewController и mainWindow.xib.

Прямо сейчас у меня загружен экземпляр viewController, который имеет тип myViewController. У пера также есть экземпляр myUIView, на который указывает myViewController.

В AppDelegate я делаю это:

[window addSubview:scrollView];
[scrollView addSubview: viewController.view];
scrollView.musicGridView = (MusicGridView*) viewController.view;

что я считаю неправильным. В идеале, appDelegate не имеет экземпляра scrollView.

В классе scrollView AwakeFromNib я выполняю инициализацию в scrollView.

Я думаю, что так и должно быть: загрузить [window addSubview: viewController.view] в appDelegate, а затем указать viewController на экземпляр scrollView вместо musicGridView. Затем в scrollView awakeFromNib добавьте подпредставление musicGridView.

В конце концов, я хочу создать другое представление, принадлежащее scrollView, которое на самом деле является боковой панелью TabBar (что невозможно с данным API), которую пользователь может прокручивать влево для достижения.

Так что я думаю, что среди других вещей MVC вопрос заключается в том, должен ли viewController указывать на scrollView, который содержит все другие подклассы содержимого UIView, включая musicGridView?

Ответы [ 2 ]

0 голосов
/ 15 июня 2009

Я тот, кто не использует Interface Builder для дизайна пользовательского интерфейса; по моему опыту, вам нужно перейти либо на все IB, либо на все программы. Я думаю, что для решения вашей конкретной проблемы ваш musicGridView должен быть экземпляром или расширением UIScrollView.

Это можно сделать с помощью метода loadView вашего пользовательского viewController - просто инициализируйте его в UIScrollView (и добавьте в него что-нибудь) вместо простого старого UIView.

Однако, как описано выше, этот подход не совместим с подходом, ориентированным на IB, как это подтверждается в Справочнике классов UIViewController

Все подклассы UIViewController следует реализовать метод loadView установить свойство вида , если вы загрузить вид из файла пера .

0 голосов
/ 13 июня 2009

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

Две наиболее важные вещи, которые вам необходимо знать при работе с IB, это ключевые слова IBOutlet и IBAction.

Пример заголовка класса:

@interface MyClass : NSObject {
  IBOutlet UIScrollView* myScrollView;
}

- (IBAction) doWork;

@end

Теперь вы можете соединить эти две вещи с помощью Interface Builder, перетаскивая источники мышью в места назначения. На YouTube есть много обучающих видео по IB, если вам нужно более подробное описание того, как это сделать.

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