2013-03-05 2 views
-1

Я реализовал собственный контроллер панели вкладок в виде набора кнопок, каждый из которых связан с собственным контроллером View. Я руководствовался этой ссылкой http://idevrecipes.com/2011/01/04/how-does-the-twitter-iphone-app-implement-a-custom-tab-bar/, чтобы добиться этого. Таким образом, соответствующая часть кода выглядит следующим образом:Пользовательские проблемы с TabBar

- (void) selectedItemAtIndex:(NSUInteger)itemIndex 
{ 
// Get the right view controller 
NSDictionary* data = [self.tabBarItems objectAtIndex:itemIndex]; 
UIViewController* viewController = [data objectForKey:@"viewController"]; 

// Remove the current view controller's view 
UIView* currentView = [self.view viewWithTag:SELECTED_VIEW_CONTROLLER_TAG]; 
[currentView removeFromSuperview]; 


// Set the view controller's frame to account for the tab bar (+ 48) 
viewController.view.frame = CGRectMake(0,48,self.view.bounds.size.width, self.view.bounds.size.height - 48); 

// Se the tag so we can find it later 
viewController.view.tag = SELECTED_VIEW_CONTROLLER_TAG; 

// Add the new view controller's view 
[self.view insertSubview:viewController.view belowSubview:self.tabBar]; 

//Keep track of current view controller 
self.currentController = viewController; 
} 

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

На первый взгляд я попытался следующий код внутри одной из вкладок контроллеров:

DetailViewController *detailViewController = [[DetailViewController alloc]init]; 
UINavigationController *navigationController = [[UINavigationController alloc]detailViewController]; 
[self presentModalViewController:navigationController animated:YES]; 

Однако не работает, как ожидалось, первый вид показан ниже TabBar и второй новый вид не принимает учитывая рамки родительского представления, которые должны быть ограничены экраном, за исключением табуляции. (0, 48, 360, 412). Мой контроллер просмотра подробностей загружает контент из файла nib.

Ну, это совершенно очевидно, так как контроллер TabBar вставляет каждый вид под мой пользовательский TabBar.

[self presentModalViewController:navigationController animated:YES]; 

Так что я попытался вставить его непосредственно в окне подвид:

[[UIApplication sharedApplication].keyWindow addSubview:navigationController.view]; 

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

Большое спасибо.

ответ

0

Если вы создаете приложение для iOS 5.0 и вы можете использовать childViewController. В пользовательской панели вкладок вы можете иметь containerView и tabView.

Вид viewController добавлен в контейнерView. Все необходимые события генерируются в последующем добавляют ViewController, если следующие методы реализованы правильно

- (void)addChildViewController:(UIViewController *)childController; 
- (void)removeFromParentViewController; 

Подробнее о ViewController локализации можно найти here.

+0

Спасибо, к сожалению, мне нужно поддерживать 4.x устройств. – Pablo

+0

Если у вас есть привилегия принять решение, вы можете выбрать минимальную цель 5.0, поскольку это упрощает защиту контроллера. – Anupdas

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