メインコントローラータブとして設定されたTabBarControllerがあり、その名前はインターフェイスビルダーを使用して定義されました。ここで、プログラムで名前を変更したいと思います。
どうすればできますか?
私の元の答え以来、多くのことが起こりました:Swift 3、ストーリーボードなど。タイトルは通常、すべてのビューが共有するもので、属性インスペクターで設定できます
また、より細かく制御するために、デザイナービューからUITabBarItem
およびUINavigationItem
要素をいつでもドラッグできます。 Tab Bar/Navigation Controllerに表示されるビューにドラッグする必要があります。基本的に、彼らは「このようなタブバーに表示したい」という情報を保存します。
Hello SceneにはTabBarItemが追加されているため、構成できます。
これらの2つの要素は、コードを介してView Controllerの.tabBarItem
および.navigationItem
プロパティにアクセスするのとまったく同じように動作します。これらのプロパティは、対応するオブジェクトの子である場合(navにはnavItemがあり、タブにはtabItemがある場合)、常にコードに存在します。ストーリーボード/ xibに追加する必要はありません。
ストーリーボード/ xibではそれらをView Controllerに追加しているように見えますが、実際には「nibはこれらのプロパティも設定します」と言っているため、この最後のことはやや混乱します。
タブバーに表示される名前は、UIViewController
のtitle
プロパティに由来し、
self.title = @"Name me!";
タイトルはいつでも変更でき、タブバー項目に表示されるテキストを更新する必要があります。しかし、注意してください、できるだけ早くこれを行う、理想的には、使用中のinit
メソッド(またはinitWithNibName:bundle:
、またはinitWithCoder:
)。
ここで重要なのは、すべてのView Controllerを初期化するときに、タブバーが画面に表示されるとすぐにinitメソッドが呼び出されることです。 viewDidLoad
でそれを行うと、実際にタブを選択した場合にのみ呼び出され、次に他の一連の呼び出しがawakeFromNib
、viewWillAppear:
、viewDidAppear:
など.
UIViewController
にタイトルを付けるという考え方は、物事の一貫性を保つことです。 UINavigationController
でviewControllerを表示する場合、backを使用する場合と同様に、上部のナビゲーションバーはtitleプロパティを使用する必要があります。 UITabBarController
も同じtitleプロパティを尊重し、それに応じて変更します。
再利用性の観点から、タイトルはUIViewController
サブクラスの内部からのみ設定する必要があります。
ペン先または絵コンテを使用していますか? UIViewController
がある場合は、属性インスペクターで直接名前を付けることができます(または ⌥⌘4)
残念ながら、ファイル所有者がUIViewController
サブクラスである場合、XCodeはファイル所有者を「外部オブジェクト」として登録し、表示しないため、この方法ではアクセスできません。それの構成パネル。 :(
しかし、時々、あなたはそれらに異なる名前を付けたいだけです
// 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"];
ナビゲーションアイテムを使用して行うこともできますが、それには私が慣れているよりも多くの体操が必要になります。
ただし、コードで実行することは可能ですが、これをストーリーボードで直接設定することをお勧めします。どうやって?
適切なタブバー項目をタップするだけですコントローラ内(タブバーコントローラ内にない)。
次に、ユーティリティパネルでattribute inspector
に切り替えます。
これですべてを変更できます:-)
Swift 4 +
tabBarController?.tabBar.items![1].title = "xx"
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;
}
これは、タブバーのアイコンの名前と画像を変更する方法です。
self.tabBarItem = [[[UITabBarItem alloc] initWithTitle:@"Main Tab" image:[UIImage imageNamed:@"maintab.png"]] autorelease];
UITabBarController :: viewDidLoadでこれを行うことをお勧めします。この場合、Tabバー項目はその時点で現在0であるため、View Controllerのタイトルを設定する必要があります。だから使用する
[[self.viewControllers objectAtIndex:0] setTitle: @"Buga"];
[[self.viewControllers objectAtIndex:1] setTitle: @"Nuga"];