web-dev-qa-db-ja.com

uitabbarcontrollerのタブ名を変更

メインコントローラータブとして設定されたTabBarControllerがあり、その名前はインターフェイスビルダーを使用して定義されました。ここで、プログラムで名前を変更したいと思います。

どうすればできますか?

33
Ruth85

XCode 8に更新

私の元の答え以来、多くのことが起こりました:Swift 3、ストーリーボードなど。タイトルは通常、すべてのビューが共有するもので、属性インスペクターで設定できます

Title Setup

また、より細かく制御するために、デザイナービューからUITabBarItemおよびUINavigationItem要素をいつでもドラッグできます。 Tab Bar/Navigation Controllerに表示されるビューにドラッグする必要があります。基本的に、彼らは「このようなタブバーに表示したい」という情報を保存します。

enter image description here

Hello SceneにはTabBarItemが追加されているため、構成できます。

これらの2つの要素は、コードを介してView Controllerの.tabBarItemおよび.navigationItemプロパティにアクセスするのとまったく同じように動作します。これらのプロパティは、対応するオブジェクトの子である場合(navにはnavItemがあり、タブにはtabItemがある場合)、常にコードに存在します。ストーリーボード/ xibに追加する必要はありません。

ストーリーボード/ xibではそれらをView Controllerに追加しているように見えますが、実際には「nibはこれらのプロパティも設定します」と言っているため、この最後のことはやや混乱します。

元の回答

タブバーに表示される名前は、UIViewControllertitleプロパティに由来し、

self.title = @"Name me!";

タイトルはいつでも変更でき、タブバー項目に表示されるテキストを更新する必要があります。しかし、注意してください、できるだけ早くこれを行う、理想的には、使用中のinitメソッド(またはinitWithNibName:bundle:、またはinitWithCoder:)。

ここで重要なのは、すべてのView Controllerを初期化するときに、タブバーが画面に表示されるとすぐにinitメソッドが呼び出されることです。 viewDidLoadでそれを行うと、実際にタブを選択した場合にのみ呼び出され、次に他の一連の呼び出しがawakeFromNibviewWillAppear:viewDidAppear:など.

UIViewControllerにタイトルを付けるという考え方は、物事の一貫性を保つことです。 UINavigationControllerでviewControllerを表示する場合、backを使用する場合と同様に、上部のナビゲーションバーはtitleプロパティを使用する必要があります。 UITabBarControllerも同じtitleプロパティを尊重し、それに応じて変更します。

再利用性の観点から、タイトルはUIViewControllerサブクラスの内部からのみ設定する必要があります。

ペン先の道

ペン先または絵コンテを使用していますか? UIViewControllerがある場合は、属性インスペクターで直接名前を付けることができます(または 4

Using interface builder, in the Attributes Inspector

残念ながら、ファイル所有者がUIViewControllerサブクラスである場合、XCodeはファイル所有者を「外部オブジェクト」として登録し、表示しないため、この方法ではアクセスできません。それの構成パネル。 :(

複数のタイトル、同じView Controller

しかし、時々、あなたはそれらに異なる名前を付けたいだけです

// Modify the display title on the tab bar
self.tabBarItem.title = @"World";

// Modify the display title on the navigation bar
self.navigationItem.title = @"Hello World";

隣人とのねじ込み

各UIViewControllerは自分の名前を処理する必要がありますが、外部から強制する場合(したがって、再利用性について述べた元のことを完全に違反する場合)はどうでしょうか。

// Rename the other guy's .title property
[[self.tabBarController.viewControllers objectAtIndex:<#Index#>] setTitle:@"Hello World"];

// Or do as before, and rename the other guy's tab bar 
[(UITabBarItem*)[self.tabBarController.tabBar.items objectAtIndex:<#index#>] setTitle:@"Hello World"];

ナビゲーションアイテムを使用して行うこともできますが、それには私が慣れているよりも多くの体操が必要になります。

44
Can

ただし、コードで実行することは可能ですが、これをストーリーボードで直接設定することをお勧めします。どうやって?

適切なタブバー項目をタップするだけですコントローラ内タブバーコントローラ内にない)。

enter image description here

次に、ユーティリティパネルでattribute inspectorに切り替えます。

enter image description here

これですべてを変更できます:-)

Swift 4 +

tabBarController?.tabBar.items![1].title = "xx"
4
Alfi

viewController.m

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
  //Here you are setting title

self.title = NSLocalizedString(@"Title", @"Title");

}
return self;
}
2
user1587244

これは、タブバーのアイコンの名前と画像を変更する方法です。

 self.tabBarItem = [[[UITabBarItem alloc] initWithTitle:@"Main Tab" image:[UIImage imageNamed:@"maintab.png"]] autorelease];
1
TommyG

UITabBarController :: viewDidLoadでこれを行うことをお勧めします。この場合、Tabバー項目はその時点で現在0であるため、View Controllerのタイトルを設定する必要があります。だから使用する

[[self.viewControllers objectAtIndex:0] setTitle: @"Buga"];
[[self.viewControllers objectAtIndex:1] setTitle: @"Nuga"];
1
RelativeGames