2012-01-22 3 views
0

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

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

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

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

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

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

+0

Часы * Реализация UIViewController Сдерживание * видео с [WWDC 2011] (https://developer.apple.com/videos/wwdc/2011/). –

ответ

0

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

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

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

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

0

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

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

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

Он быстро становится сложным. Добавление вид другого ViewController как подвид является Чайлдс играть.

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

0

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

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