web-dev-qa-db-ja.com

タブバーコントローラー内のナビゲーションバーのタイトルの設定

私のアプリには、テーブルビューのナビゲーションコントローラーがあり、ボタンを押すとタブコントローラーが開きます。最初のタブで、ナビゲーションバーのタイトルを設定します。

これは、お互いを理解していることを確認するための私のストーリーボードの画像です。

enter image description here

これは動作するはずの私のコードです。タブコントローラーではなく単一のビューを開こうとしたときにこのコードを使用しましたが、正しく機能していました。だから私は何かを変えなければならないと思います。

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{       
        SkiCenter *myDetViewCont = [[SkiCenter alloc] initWithNibName:@"SkiCenter" bundle:[NSBundle mainBundle]];
        myDetViewCont.ski_center = [centers objectAtIndex:indexPath.row];
        UIStoryboard * storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
        [[self navigationController] pushViewController:[storyBoard instantiateViewControllerWithIdentifier:@"SkiCenterIds"] animated:YES];
        //[self.navigationController pushViewController:myDetViewCont animated:YES]; // "Pushing the controller on the screen"
        [myDetViewCont release]; // releasing controller from the memory
        myDetViewCont = nil;        
    }

ここで、Skicenterは最初のタブのクラスの名前であり、SkiCenterIdsはストーリーボード内のタブコントローラーの識別子です。

Skicenter。mのコードは次のとおりです。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    self.navigationItem.title = ski_center;        
}

でもタイトルが見当たりません。だから私が間違ったことは何ですか?私もこれを試しました:

[self.navigationController setTitle:@"Live"];

または

self.title=ski_center;

ski_centerは、NSLogに通常どおり出力されるため、値があります。

15
ghostrider

基本的に、あなたが気づかなかったかどうかはわかりませんが、私はそれを次のように機能させました:

タブバーコントローラーに新しいクラスを割り当てました。

私は次のことをしました:

に追加appdelegate.h

@property (nonatomic,retain) NSString *center;

に追加mainmap.m

AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    delegate.center=[centers objectAtIndex:indexPath.row];

およびmytabbarcontroller.m

  AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    ski_center=delegate.center;

    self.navigationItem.title = ski_center;
1
ghostrider

シンプル!

[self.tabBarController setTitle:@"Title"];
40
nithinreddy

Ghostriderのソリューションに追加すると、mytabbarcontroller.mのself.navigationItem.titleが機能しませんでした。詳細ビューがTabControllerであるNavigationControllerがあり、これが最初のタブ実装にあるものです。

self.navigationController.visibleViewController.title = ski_center;
16
Rip

ご存知のとおり、UITabBarControllerUINavigationController内に配置することは非常に悪い習慣です-Appleは、優れたUIデザインのために、 UINavigationControllerUITabBarController内にあり、その逆ではありません。どちらの方法でも、このようにUITabBarControllerからタイトルを変更できるはずです。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    [[self.navigationController.viewControllers objectAtIndex:0] setTitle:ski_center];        
}

それはうまくいくはずです。

5
Wasim

Swift 4以上

self.tabBarController?.title = "Title"
4
raed

In Swift 3

self.tabBarController?.navigationItem.title = "Your title goes here"
4
Jigar Thakkar
 UITabBarController *tabController = (UITabBarController *)self.parentViewController;

 tabController.navigationItem.title = @"ABC";

これは私のために働いています

インターネット上のいくつかのR&Dから

navigationItemをチェーンの上位に渡す必要があります。UINavigationControllerは、UITabBarControllerであるtopViewControllerに属するnavigationItemを表示します。UITabBarControllerは、タブにnavigationItemのタイトルを表示します。行うことは、tabBarControllerのnavigationItemがselectedViewControllerのnavigationItemであることを確認することです。

要約すると:

UINavigationController title = topViewController.navigationItem.title

UITabBarController tabTitle = selectedViewController.navigationItem.title

UIViewControllerタイトル= navigationItem.title

2
Suraj K Thomas

これを試して:

[self.navigationController setTitle:@"Live"];
1
Fab1n

私はこれに出くわし、より簡単な解決策を見つけました。新しい解決策は、以下のようにランディングビューコントローラーからナビゲーションバーのタイトルを変更することです。

override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.navigationBar.topItem?.title = "title";
 }
0