2012-07-22 73 views
0

我已經編程創建了一個帶有視圖的TabBarController等。現在我想在Button按鈕上顯示這個TabBarController。我怎麼做?目前我正在以模態方式呈現它,但它不起作用 - 拋出sigtrap錯誤。在按鈕上訪問TabBarController按

這是我的TabBarController

@implementation TabBarViewController 

- (void) loadView 
{ 
    HomeViewController * homeViewController = [[HomeViewController alloc]initWithNibName:@"HomeViewController" bundle:nil]; 

    UITabBarController *tabBarController = [[UITabBarController alloc] init]; 
tabBarController.view.frame = CGRectMake(0, 0, 320, 460); 

    // Set each tab to show an appropriate view controller 
    [tabBarController setViewControllers:[NSArray arrayWithObjects:homeViewController, homeViewController, nil]]; 
    [self.view addSubview:tabBarController.view]; 
    [homeViewController release]; 
    [tabBarController release]; 
} 

代碼這是我從我的mainViewController從按鈕按下事件訪問該tabBarController碼 -

- (IBAction)quickBrowse:(UIButton *)sender 
{ 
    TabBarViewController * tabBarController = [[TabBarViewController alloc]init]; 
    [self presentModalViewController:tabBarController animated:YES]; 
    [tabBarController release]; 
} 

回答

1

您應該只覆蓋的方法的loadView如果你沒有使用IB,如果你想創建你的手動查看。而當你這樣做的時候,你必須將你的根視圖分配給UIViewController的視圖屬性。

我相信你的情況下你不需要重寫這個方法,你可以使用viewDidLoad方法來創建你的UITabBarController並將它存儲在一個變量中,所以當事件被調用時,所有你需要做的就是傳遞變量的方法presentModalViewController:動畫:

你的最終代碼應該是這樣的:

- (void) viewDidLoad 
{ 
    [super viewDidLoad]; 

    HomeViewController * homeViewController = [[HomeViewController alloc]initWithNibName:@"HomeViewController" bundle:nil]; 

    // you can't pass the same view controller to more than one position in UITabBarController 
    HomeViewController * homeViewController2 = [[HomeViewController alloc]initWithNibName:@"HomeViewController" bundle:nil]; 

    // local variable 
    self.modalTabBarController = [[UITabBarController alloc] init]; 

    // Set each tab to show an appropriate view controller 
    [self.modalTabBarController setViewControllers:[NSArray arrayWithObjects:homeViewController, homeViewController2, nil]]; 
} 

- (void)viewDidUnload 
{ 
    self.modalTabBarController = nil; 
    [super viewDidUnload]; 
} 

- (IBAction)quickBrowse:(UIButton *)sender 
{ 
    [self presentModalViewController:self.modalTabBarController animated:YES]; 
}