Управление несколькими UIViews из одного UIViewController - PullRequest
4 голосов
/ 03 октября 2010

Я запутался в контроллерах представления и хотел бы получить прямой пример.Вот преамбула:

У меня есть UIViewController с соответствующим .xib.По умолчанию IB предоставляет мне один вид в окне документа.Я могу заставить его появиться, сказав моему UIWindow addSubview:controller.view и bringSubviewToFront:controller.view

Вот вопросы:

  1. Должен ли я добавить другой View в ViewController в IB?Или есть лучший, программный способ?

  2. Как мне сказать ViewController для переключения между представлениями?

  3. От ViewController вниз,как выглядит код для достижения этой цели?

Я пытаюсь что-то сделать, но просто путаюсь, поэтому решил остановиться и спросить ...

1 Ответ

7 голосов
/ 04 октября 2010

Обратите внимание, что каждая кнопка, метка, изображение и т. Д. В вашем контроллере основного вида на самом деле является представлением само по себе, однако я понял, что ваш вопрос означает, что вы хотите управлять несколькими полноэкранными представлениями или "экранами". Каждый экран должен иметь свой собственный контроллер вида для управления им. Таким образом, чтобы получить правильную терминологию, контроллер представления - это объект, который управляет одним полноэкранным представлением (или почти полноэкранным, если он вложен, например, в контроллер навигации или контроллер панели вкладок), а представление - это большая область, управляемая контроллер представления, а также все вложенные представления (изображения, кнопки, метки и т. д.) внутри него (все они являются подклассами UIView). Контроллер представления управляет всеми ими на этом экране, если вам нужен другой экран / страница, вам нужно создать новый контроллер представления для управления им.

Корневой контроллер вида (тот, который вы добавляете в окно) может быть обычным старым контроллером обычного вида, который вы спроектировали в IB, однако это, вероятно, более полезно, если вы используете контроллер навигации или контроллер панели вкладок и добавляете ваш разработанный контроллер представления к этому - тогда вы можете выдвинуть дополнительные контроллеры представления по мере необходимости.

Другим способом (если вам не нужен стиль навигации или стиль панели вкладок) будет переход на другие контроллеры представления непосредственно в главном окне с использованием любых переходов, которые вам нравятся (или просто замена старого). Мы пока оставим это.

Любые вложенные представления вашего основного контроллера представления (тот, который вы создали в IB) будут автоматически загружаться из файла пера, но вы также можете добавлять свои собственные представления программно, если хотите (обычно вы используете один или другой, то есть программно nibs или , но вы можете смешивать и сочетать, если хотите). Чтобы сделать это программно, переопределите loadView в контроллере представления и затем вызовите [super loadView];, затем выполните [self.view addSubView:myOtherView]; (сначала создайте myOtherView, конечно). Обратите внимание, что при первом обращении к .view на вашем контроллере представления он фактически вызывает loadView для создания представления, поэтому внутри loadView важно вызвать [super loadView];, прежде чем пытаться получить доступ к self.view: D

Переключение между представлениями с помощью контроллеров навигации или панели вкладок делает это очень простым. Так что поместите ваш контроллер основного вида внутри (например) контроллера навигации и поместите контроллер навигации в окно, чтобы вы получили window-> navigationController-> myController. Затем из метода действия в вашем контроллере представления (вы можете подключить методы действия в IB), например, когда нажата кнопка «о», сделайте следующее:

- (void)doAbout
{
    // Create the about view controller
    AboutViewController* aboutVC = [AboutViewController new];
    // Push the view controller onto the navigation stack
    [self.navigationController pushViewController:aboutVC animated:YES];
    [aboutVC release];
}

Обратите внимание, что контроллер about view создается здесь программно - если ваш about view разработан в IB, вместо этого используйте initWithNibName:bundle: для его создания.

И вот как вы управляете несколькими экранами.

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