Пользовательские UITabBarController Проблемы с контроллерами представления и представлениями - PullRequest
2 голосов
/ 16 сентября 2009

Я пишу пользовательский UITabBarController, чтобы полностью контролировать внешний вид панели вкладок. У меня все это работает, поэтому у меня есть массив контроллеров представления, которые он обрабатывает.

Контроллер имеет основной вид, который заполняет экран, а внутри него UIView внизу для панели вкладок. Это представление панели вкладок имеет кнопку для каждого контроллера представления. Когда кнопки нажимаются, я добавляю вид контроллера представления на основной вид и устанавливаю его рамку так, чтобы он не закрывал вид панели вкладок:

controller.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height - kTabBarHeight);

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

Я также попытался добавить виды контроллеров представления внизу (под панелью вкладок), используя:

[self.view insertSubview:controller.view atIndex:0];

Но когда я это делаю, панель вкладок даже видна над любыми модальными представлениями! Что странно. Я думаю, что я чего-то не понимаю, поэтому я был бы благодарен, если бы кто-нибудь смог объяснить, что мне не хватает!

Спасибо

Mike

Ответы [ 3 ]

2 голосов
/ 17 сентября 2009

Попробуйте это. Я думаю, что вы хотите динамические контроллеры представления в контроллере панели вкладок.

-(void)applicationDidFinishLaunching:(UIApplication *)application {

// Add the tab bar controller's current view as a subview of the window
tabBarController.delegate=self;
tabBarController=[[UITabBarController alloc] init];

mainDashBoard=[[DashBoard alloc] initWithNibName:@"DashBoard" bundle:nil];
mainSearchView=[[SearchView alloc] initWithNibName:@"SearchView" bundle:nil];
mainMoreView=[[MoreView alloc] initWithNibName:@"MoreView" bundle:nil];

UINavigationController *nvCtr0=[[[UINavigationController alloc] init] autorelease];
UINavigationController *nvCtr1=[[[UINavigationController alloc] initWithRootViewController:mainDashBoard] autorelease];
UINavigationController *nvCtr2=[[[UINavigationController alloc] initWithRootViewController:mainSearchView] autorelease];
UINavigationController *nvCtr3=[[[UINavigationController alloc] initWithRootViewController:mainMoreView] autorelease];
UINavigationController *nvCtr4=[[[UINavigationController alloc] init] autorelease];//[[[UINavigationController alloc] initWithRootViewController:nil] autorelease];

tabBarController.viewControllers=[NSArray arrayWithObjects:nvCtr0,nvCtr1,nvCtr2,nvCtr3,nvCtr4,nil];

nvCtr0.tabBarItem.enabled=NO;
nvCtr4.tabBarItem.enabled=NO;

[window tabBarController.view];
}
2 голосов
/ 18 сентября 2009

Мне удалось найти лучший способ управления внешним видом панели вкладок, просто вставив подпредставления в верхнюю часть панели вкладок контроллеров вкладок. Это сработало!

2 голосов
/ 16 сентября 2009

Попробуйте установить

controller.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height - kTabBarHeight); 

в методе контроллера viewWillAppear

...