2012-10-26 123 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混亂。)我不確定你應該做什麼,但可能會讓你的標題/細節標籤欄控制器的控制器的孩子會工作。 –