私のアプリには、テーブルビューのナビゲーションコントローラーがあり、ボタンを押すとタブコントローラーが開きます。最初のタブで、ナビゲーションバーのタイトルを設定します。
これは、お互いを理解していることを確認するための私のストーリーボードの画像です。
これは動作するはずの私のコードです。タブコントローラーではなく単一のビューを開こうとしたときにこのコードを使用しましたが、正しく機能していました。だから私は何かを変えなければならないと思います。
- (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に通常どおり出力されるため、値があります。
基本的に、あなたが気づかなかったかどうかはわかりませんが、私はそれを次のように機能させました:
タブバーコントローラーに新しいクラスを割り当てました。
私は次のことをしました:
に追加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;
シンプル!
[self.tabBarController setTitle:@"Title"];
Ghostriderのソリューションに追加すると、mytabbarcontroller.mのself.navigationItem.titleが機能しませんでした。詳細ビューがTabControllerであるNavigationControllerがあり、これが最初のタブ実装にあるものです。
self.navigationController.visibleViewController.title = ski_center;
ご存知のとおり、UITabBarController
をUINavigationController
内に配置することは非常に悪い習慣です-Appleは、優れたUIデザインのために、 UINavigationController
はUITabBarController
内にあり、その逆ではありません。どちらの方法でも、このようにUITabBarController
からタイトルを変更できるはずです。
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[[self.navigationController.viewControllers objectAtIndex:0] setTitle:ski_center];
}
それはうまくいくはずです。
Swift 4以上
self.tabBarController?.title = "Title"
In Swift 3
self.tabBarController?.navigationItem.title = "Your title goes here"
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
これを試して:
[self.navigationController setTitle:@"Live"];
私はこれに出くわし、より簡単な解決策を見つけました。新しい解決策は、以下のようにランディングビューコントローラーからナビゲーションバーのタイトルを変更することです。
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.topItem?.title = "title";
}