2011-11-13 10 views
6

プログラムで作成されたタブバーがあり、ビューに関連付けられたストーリーボードを初期化するのが難しいです。ストーリーボードビューコントローラーを使用してプログラムによるタブバーを作成しますか?

ストーリーボードのないタブバー(下のコードを参照)でビューを正常に読み込むことができますが、一部のUIコンポーネントがストーリーボードにあるため、ビューが部分的にしか表示されません。

私のストーリーボードの名前はMainStoryboardで、私はストーリーボードビュー識別子をSettingsViewControllerに設定しました。

以下のコードでSettingsViewControllerのストーリーボードを初期化するにはどうすればよいですか?

- (void)createTabBarItems { 
    tabBarController = [[UITabBarController alloc] init]; 

    settingsViewController = [[SettingsViewController alloc] init]; 


    UINavigationController *sett = [[[UINavigationController alloc] 
            initWithRootViewController: settingsViewController] autorelease]; 

    [sett.tabBarItem setTitle:@"Settings"]; 
    [sett.tabBarItem setImage:[UIImage imageNamed:@"settings.png"]]; 

    [tabBarController setViewControllers: 
     [NSArray arrayWithObjects:sett, sett, sett, sett, nil]]; 
} 

答えて

16

あなたが直接ビューコントローラに割り当てるのではなく、ストーリーボードのメソッドを使用する必要がストーリーボードのようにビューコントローラを初期化したい場合:

// load the storyboard by name 
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 

// either one of the two, depending on if your view controller is the initial one 
settingsViewController = [storyboard instantiateInitialViewController]; 
settingsViewController = [storyboard instantiateViewControllerWithIdentifier:@"SettingsViewController"]; 
+0

Iをあなたのコードの最初の行にエラーが発生しました "セレクタ 'storyBoardWithName:'"のための既知のクラスメソッドがありません。そこで、コードの最初の行に "bundle:nil"を追加しました。今度はエラーが表示されます:「ナビゲーションコントローラのプッシュはサポートされていません」エラーを修正するために何ができるのですか?「バンドル:nil」を追加して正しいことをしましたか? – kevin

+0

それは今働いています...私はいくつかのコードが混ざっていました。ありがとうございました! – kevin

+0

ありがとうございました。バンドルパラメータが実際にはなくなっていました。私はそれを修正しました。 'bundle:nil'は、これがメインバンドルでルックアップを行うため、問題ありません。 –

0

スウィフト4

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
settingsViewController = storyboard.instantiateInitialViewController() 
settingsViewController = storyboard.instantiateViewController(withIdentifier: "SettingsViewController") 
関連する問題