2014-02-13 204 views
0

我有一個應用程序,它具有允許用戶登錄的初始視圖控制器。用戶登錄後,我試圖將視圖更改爲自定義選項卡欄控制器,是類類型TabViewController。問題是,當我切換到標籤欄控制器時,屏幕是黑色的,底部的標籤欄是灰色和空的。從視圖控制器切換到自定義選項卡欄控制器

下面是一些有關的代碼:

在ViewController.m(初始登錄視圖)

- (IBAction)logInButtonClicked:(UIButton *)sender 
{ 
    TabViewController *tabView = [[TabViewController alloc] initWithSession:session]; 
    [self presentViewController:tabView animated:YES completion:nil]; 
} 

在TabViewController.m(類分配給標籤欄控制器)

-(id) initWithSession: (Session*) s 
{ 
    self = [super init]; 

    if (self) 
    { 
     session = s; 
    } 

    return self; 
} 

請注意,當我做默認初始化像這樣:

TabViewController *tabView = [[TabViewController alloc] init]; 

我得到了同樣的結果。

如何使我的標籤視圖控制器看起來像它在我的故事板上初始化?

故事板:

enter image description here

的標籤視圖控制器看起來像在模擬器什麼:

enter image description here

回答

1

我不知道這是最好的方式,但它的確切什麼我在我的最後一個應用程序,它工作正常。

嘗試使標籤欄視圖控制器成爲您的應用程序的根/初始視圖控制器。

根據蘋果的開發者類的引用:

當部署一個標籤欄的界面,您必須安裝這種觀點作爲你的窗口的根。與其他視圖控制器不同,選項卡欄界面不應該被安裝爲另一個視圖控制器的子視圖。

這樣做了以後,建立從標籤欄視圖控制器登錄視圖控制器故事板模態SEGUE,將其命名爲「segueLogin」,並在你的標籤欄視圖控制器類的viewDidAppear方法手動調用它。

if(!userHasLogin){ 
    [self performSegueWithIdentifier:@"segueLogin" sender:self]; 
} 
+0

[自performSegueWithIdentifier(所述custome類TabViewController的下面):@ 「segueLogin」 發件人:自];這就是我需要的。除了我從登錄視圖這樣做,它似乎工作正常。 –

+0

很高興知道我可以幫忙。但是,如果您通過模態segue顯示標籤欄視圖控制器,我想建議您再次將標籤欄視圖控制器作爲「窗口的根」。我不是這裏的專家,但我曾經在導航視圖控制器中放置了一個標籤欄視圖控制器,它讓我感到很多奇怪的問題。無論如何,這取決於你。 – AdrianHou

0

您應該創建的TabViewControllerUIStoryboard- (id)instantiateViewControllerWithIdentifier:(NSString *)identifier 在你的情況下,與[[TabViewController alloc] init]創建是錯誤的,你不編程方式創建所有選項卡。

1

其真的很容易,

我會盡力解決你的問題分兩步。

步驟1--在情節串連圖板選擇TabViewController並給它一個標識符

步驟2--

- (IBAction)logInButtonClicked:(UIButton *)sender 
{ 
UIStoryboard *storyBoard=[UIStoryboard storyboardWithName:@"Your_Story_Board_Name" bundle:nil]; 
TabViewController *tabView = [storyBoard instantiateViewControllerWithIdentifier:@"TabViewController_Identifier_From_Storyboard"]; 
[self presentViewController:tabView animated:YES completion:nil];  
} 
相關問題