2012-02-13 4 views

ответ

2

Хотя это не рекомендуется, вы можете создать экземпляр UIViewController доступа это view свойства и установить его в качестве подвида основного view вашего главного UIViewController является управляющим. Он работает, и я никогда не испытывал проблем с этим.

Это означает, что рекомендуется использовать подкласс класса NSObject, а не использовать UIViewController, поскольку он имеет особое поведение.

+0

В дополнение к этому вы можете отслеживать добавленные контроллеры представлений, ссылаясь на них из сохраненного NSArray (полный init) или добавляя их в сохраненный NSMutableArray (lazy init) – shawnwall

0

Нечто похожее описано в iOS: different addSubview behavior between iOS 4.3 and 5.0.

Я решил его, добавив следующие строки:

NSMutableArray *controladores=[[NSMutableArray alloc]init]; 
     [controladores addObject:myController]; 
     if ([[[UIDevice currentDevice] systemVersion] compare:@"5.0"] == NSOrderedAscending) { 
      [tabBar setViewControllers:controladores animated:YES]; 
     } 
+2

Я бы предложил против проверки версии ОС путем доступа свойство 'systemVersion'. Вместо этого вы должны проверить наличие селектора 'setViewControllers:', выполнив что-то вроде: 'if ([tabBar отвечаетSoSelector: @selector (setViewControllers :))). – pgb

+0

Спасибо! Это лучшая идея! –

0

Я предполагаю, что причина вы хотите сделать это для приложения Ipad, как и Apple, состояние, что один-контроллер должен «вообще» (и до IPad они заявили «всегда») контролируют весь экран, полный представлений.

Это действительно изменилось с помощью дополнительной экранной недвижимости ipad, когда Apple выпустила собственный контроллер контейнера (splitViewController), который в конечном итоге привел к созданию Apple, позволяя нам создавать собственные контроллеры контейнеров в ios5.

Если ваше приложение является приложением для iphone, то я (и Apple) серьезно поставил под сомнение вашу потребность в сдерживании контроллера вида.

Смежные вопросы