Почему неправильно вставлять вид из одного контроллера вида в другой? - PullRequest
0 голосов
/ 22 января 2012

В приложении для iPad у меня есть вкладка Controller, содержащая несколько контроллеров представления. Для одного из этих контроллеров представления (назовите его MainViewController) требуются два табличных представления рядом.

Итак, я написал 2 подкласса UITableViewController и из MainViewController я выделяю / инициализирую оба подкласса UITableViewController и добавляю представление таблицы из каждого в представление MainViewController.

Это означает, что представления подклассов UITableViewController являются подпредставлениями представления MainViewController.

Этот ответ: https://stackoverflow.com/a/7684648/191463 говорит, что это неправильно, и кажется, что Apple начинает сокращать его.

Я действительно не хочу помещать весь код из обоих UITableViewControllers в MainViewController, так как это сделает его более трудным для чтения и в будущем может создать дублирующий код, если я захочу использовать одну из таблиц в другом месте в приложение само по себе.

Это на самом деле проблема, если это как мне сделать это правильно?

Ответы [ 3 ]

0 голосов
/ 22 января 2012

Это нормально, если вы берете на себя ответственность за управление событиями жизненного цикла viewController

initWithNibName...
loadView:
viewDidLoad:...
.
.
viewDidUnload..
dealloc
memoryWarnings
orientation changes

Таким образом, если вы создаете пользовательский «контроллер представления контейнера», вы обязаны вызывать все эти методы в дочерних viewControllers в соответствующее время. Думайте об этом как "Если бы вы внедрили UITabBarController", что вам нужно будет сделать в отношении детей ?? "

Это быстро становится сложным. Добавление другого представления viewController в качестве подпредставления - это детская игра.

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

0 голосов
/ 22 января 2012

Я бы сказал, что создание контейнеров контроллеров представления не является неправильным или неправильным, особенно когда инженеры Apple делают это самостоятельно.UITabBarController, UINavigationController или UISplitViewController - все они являются контейнерами контроллера представления.Более того, многие замечательные приложения с уникальным UX делают это чаще, чем вы думаете.Однако реальная проблема заключается в том, что это довольно сложно сделать правильно, например, жизненный цикл представления, управление памятью и обработка ротации выполняются должным образом по иерархии представлений.К счастью, ребята из Apple проделали достойную работу, и iOS5 представила множество функциональных возможностей, связанных с контейнерами контроллеров:

Если вам интересно, как нужно было решать вышеупомянутые проблемы перед iOS5, прочитайте эти два очень хороших сообщения в блоге:

0 голосов
/ 22 января 2012

Apple не сокращает это.Это единственный способ создания пользовательских контроллеров контейнерных представлений до iOS 5. Apple на самом деле слушала разработчиков и упростила такую ​​задачу в iOS 5 с помощью методов контроллера дочернего и родительского представления, не говоря уже о том, что они сделали это такон работал иерархически.

В большинстве случаев это не будет проблемой с точки зрения сбоя приложений, производительности или чего-либо еще.В некоторых случаях это может быть проблемой, потому что, допустим, у вас есть дочерний контроллер представления.Вы добавляете представление контроллера представления в свой корневой контроллер представления.До iOS 5 контроллерами дочерних представлений были такие вещи, как контроллеры представлений контроллеров навигации, контроллеры представлений контроллеров панели вкладок и контроллеры модальных представлений.Что происходит, когда у вас есть кнопка, которая вызывает [self.parentViewController dismissModalViewControllerAnimated:YES];?Технически, контроллер представления не представлен как модальный контроллер представления, вы добавили представление к представлению контроллера корневого представления.

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

Теперь, даже если у вашего контроллера представления нет другого родителя, добавление «корневого» контроллера представления к другому корневому контроллеру представления не лучший способсделайте это (особенно если вы не получите доступ к родительскому контроллеру представления, если вы явно не создадите указатель parentViewController в дочернем контроллере представления).Так что, в конце концов, Apple просто упростила процесс и стала более разобщенной.

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