web-dev-qa-db-ja.com

ストーリーボードナビゲーションコントローラーとTab Barコントローラー

Storyboardで次のセットアップを取得しようとしています。

Storyboard

最初にテーブルビューがあり、セルをタップすると、動作するTab Bar Controllerに移行する必要があります。しかし、今では、最も適切な2つのコントローラーにタイトルと追加のナビゲーションバーボタンが必要です。

しかし、ボタンをそこにドラッグしたり、タイトルを設定するときに何も表示されないようです。ストーリーボードでこの設定を実現するにはどうすればよいですか?

編集:

以下の回答に基づいて、質問を更新しました。

New setup

この新しいセットアップがある場合(その間に追加のナビゲーションコントローラーを使用する場合)、ストーリーボードでタイトルを設定できますが、アプリを実行すると、追加されたタイトルは表示されません。

編集:私は アップロード 正確にそのセットアップでxcodeプロジェクトを持っています。おそらくそれは重宝するでしょう。

20
Matthijn

UINavigationBarタイトルを変更するために(他の2つのUINavigationControllerを作成する必要なしに)使用できます

[self.parentViewController.navigationItem setTitle:@"Title"];

右ボタンを追加するために使用します

self.parentViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(myRightButton)];

viewDidLoadから参照される各UIViewControllerUITabBarControllerメソッド。

UIViewControllerからのTabItems内の「ナビゲーション構造」で作業する場合、BUFViewController.mを編集できます。

#import "BUFViewController.h"

@interface BUFViewController ()

@end

@implementation BUFViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self.parentViewController.navigationController setNavigationBarHidden:YES];
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)];
}

-(void)done{
    [self.parentViewController.navigationController popToRootViewControllerAnimated:YES];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

UITabBarControllerは親NavigationControllerの中にあると考える必要があるため、親UINavigationBarを非表示にして自分のものを表示する必要があります。その後、親のpopToRootViewControllerAnimatedUINavigationController:を使用してテーブルに戻ることができます。

それが役立つことを願っています:)

24
ErickBergmann

誰かがSwiftアプローチを探していた場合に備えて:

tabBarController?.title = "Your Title"
tabBarController?.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Right Button Title", style: UIBarButtonItemStyle.Plain, target: self, action: "rightButtonFunction")

コードはviewDidAppearまたはviewWillAppearに配置するのが最適であるため、さまざまなタブを押すとタイトルとボタンが変わります。

また、このアプローチでは追加のNavigation Controllerは必要ありません。

10
Cradmon

テストアプリを見て、ナビゲーションバーの下に非常にかすかにタイトルが表示されています。 Tab Bar Controllerを選択し、「Under Top Bars」ボックスをオフにすると、両方のナビゲーションバーが表示されます。ただし、これにより、ナビゲーションバーに奇妙な影ができます。これを簡単に修正する方法があるかどうかはわかりませんが、2つのナビゲーションバーを備えたこのUIが良いとは思いません。最初のNavigation Controllerを削除し、モーダルセグエを使用して代わりにTab Bar Controllerを表示することができます。モーダルビューコントローラーを破棄する必要があるナビゲーションコントローラーにバーボタン項目を追加できます。

3
rdelmar

これらのView ControllerをUINavigationViewControllersに置き換える必要があります。

右側の2つのView Controllerを削除します。

2 UINavigationViewControllersをストーリーボードにドラッグドロップし、好きなように配置します。

次に、これらの新しいNavigation View ControllerをTab Bar Controllerにフックする必要があります。 Ctrlを押しながらTab Bar ControllerからNavigation Controllerにドラッグします。表示されるメニューの[関係セグエ]セクションから[コントローラーの表示]を選択します。両方のNavigation Controllerに対してこれを行います。

1
ColdLogic
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"Overview_Register"])
    {
        WDRegisterViewController *obj=(WDRegisterViewController *)[segue destinationViewController];
        obj.str_Title=@"Edit Profile";
        obj.isRegister=NO;
    }
}

            [self performSegueWithIdentifier:@"Overview_Measure" sender:nil];



    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    WDPeekViewController *Peek = (WDPeekViewController *)[sb instantiateViewControllerWithIdentifier:@"WDPeekViewController"];
 [self.navigationController pushViewController:tabBarController animated:YES];
0
Anand