2013-03-05 89 views
-1

我实现了一个自定义选项卡栏控制器作为一组按钮,每个按钮都与它自己的View Controller相关。我在此链接上指导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下面和第二新的视图没有采取考虑到应该是屏幕的父视图框架限制少了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的视图被添加到containerView。所有必要的事件产生到后来加入的viewController如果下面的方法是否正确

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

更多关于实施遏制的viewController可以发现here.

+0

谢谢,不幸的是我需要支持4.x的设备。 – Pablo 2013-03-05 16:01:55

+0

如果您有权作出决定,您可以选择5.0的最低目标,因为这会使视图控制器的遏制非常容易。 – Anupdas 2013-03-05 16:12:27