2012-10-26 85 views
1

我正在做一个自定义UIViewController持有子视图控制器。它们被放在主视图控制器内这种方式:贪婪的UITabBarController?

- (void) setHeaderViewController:(UIViewController *)vc 
{ 
    [self setViewController:vc isHeader:YES]; 
    _headerViewController = vc; 
} 

- (void) setDetailViewController:(UIViewController *)vc 
{ 
    [self setViewController:vc isHeader:NO]; 
    _detailViewController = vc; 
} 

- (void) setViewController:(UIViewController*) viewController isHeader:(BOOL)isHeader 
{ 
    UIViewController* viewControllerRef = ((isHeader) ? _headerViewController : _detailViewController); 

    if(viewControllerRef == viewController) 
     return; 

    const CGSize selfSize = self.view.frame.size; 

    CGRect viewFrame; 

    if (isHeader) 
    { 
     viewFrame = CGRectMake(0, 0, selfSize.width, 150); 
    } 
    else 
    { 
     viewFrame = CGRectMake(0, 150, selfSize.width, selfSize.height-150); 
    } 

    UIView* viewControllerView = viewController.view; 

    [viewControllerView setFrame:viewFrame]; 
    [viewControllerView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | ((isHeader) ? UIViewAutoresizingFlexibleBottomMargin : UIViewAutoresizingFlexibleTopMargin))]; 

    [self.view addSubview:viewControllerView]; 
} 

如果我把2个UIViewControllers每个子视图控制器槽的内部,在该方法中定义的尺寸被推崇。然而,把一个的UITabBarController时,它变得贪婪,占据了整个空间:

UIViewController *vc = [[WIFCustomerDetailHeaderViewController alloc] initWithNibName:@"WIFCustomerDetailHeaderViewController" bundle:nil]; 
[self setHeaderViewController:vc]; 

UIViewController *vc1 = [[UIViewController alloc] init]; 
vc1.title = @"Personal Data"; 
vc1.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Personal Data" image:nil tag:0]; 
vc1.view.backgroundColor = [UIColor redColor]; 
vc1.view.frame = CGRectMake(0,400,100,100); 

UIViewController *vc2 = [[UIViewController alloc] init]; 
vc2.title = @"Diagnosis"; 
vc2.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Diagnosis" image:nil tag:0]; 
vc2.view.backgroundColor = [UIColor purpleColor]; 
vc2.view.frame = CGRectMake(0,500,50,50); 

NSArray *tabs = [[NSArray alloc] initWithObjects:vc1, vc2, nil]; 

WIFCustomerDetailTabViewController *tvc = [[WIFCustomerDetailTabViewController alloc] init]; 
[tvc setViewControllers:tabs]; 

[self setDetailViewController:tvc]; 

有谁知道什么可以在这里发生了什么?我找不到原因...

图像以下..

Two sub view controllers enter image description here

回答

2

文档中的类的UITabBarController说,“您必须安装这种观点作为你的窗口的根。与其他视图控制器不同,不应将标签栏界面安装为另一个视图控制器“”的子项。

看来你正在尝试一种特别不受支持的设计。

+0

此外,您没有实现视图控制器遏制。您还必须维护视图_controller_层次结构,而不是只添加子视图。 – jrturton

+0

使视图控制器只能是根视图控制器有什么意义?这打破了他们的所有效用。不明白原因。 在这种情况下应该怎么做?你能给我你的意见吗? –

+0

那么,肯定不是所有**的实用程序,因为有多少应用程序已将它们用作窗口的根控制器。 (我不知道原因,尽管我可以想象用嵌套标签栏控制器可以创建的那种UI混乱。)我不确定你应该做什么,但可能会让你的标题/细节标签栏控制器的控制器的孩子会工作。 –