簡體   English   中英

在uitabbarcontroller中更改選項卡名稱

[英]Change tab name in uitabbarcontroller

我有一個TabBarController設置為主控制器選項卡,其中使用接口生成器定義名稱。 現在,我想以編程方式更改其名稱。

怎么做?

更新為XCode 8

自從我最初的回答以來,發生了很多事情:Swift 3,情節提要等。標題通常是所有視圖共享的標題,可以在屬性檢查器中設置

標題設定

此外,為了獲得更多控制,您始終可以從設計器視圖中拖動UITabBarItemUINavigationItem元素。 您必須將它們拖到標簽欄/導航控制器中將要顯示的視圖上。 基本上,他們將信息存儲為“我想這樣顯示在選項卡欄中”。

在此處輸入圖片說明

Hello Scene將添加一個TabBarItem,因此可以對其進行配置。

這兩個元素的行為與通過代碼訪問視圖控制器的.tabBarItem.navigationItem屬性完全相同。 如果這些屬性是對應對象的子代(nav具有navItem,而tab具有tabItem),則它們始終存在於代碼中,無需將它們添加到Storyboard / xib中即可。

最后一件事有點令人困惑,因為在情節提要/ xib中似乎是將它們添加到視圖控制器中,但實際上您只是在說“ nib也將配置這些屬性”。

原始答案

標簽欄上顯示的名稱來自UIViewControllertitle屬性,

self.title = @"Name me!";

您可以隨時更改標題,它應該可以更新選項卡欄項上顯示的文本。 但請注意,最好在使用的init方法(或initWithNibName:bundle:initWithCoder: 盡快執行此操作

這里的關鍵是,選項卡欄出現在屏幕上時會初始化所有的視圖控制器,因此會立即調用init方法。 如果要在viewDidLoad上執行此操作,則只有在您實際選擇選項卡時才會調用,然后進行其他調用, awakeFromNibviewWillAppear:viewDidAppear:等也是如此。

UIViewController上具有標題的想法是使內容保持一致。 如果在UINavigationController上顯示viewController,則頂部的導航欄應使用title屬性,就像在使用back時一樣。 UITabBarController也尊重相同的title屬性,並相應地進行更改。

在可重用性方面,您應該僅從UIViewController子類的內部設置標題。

筆尖的方式

使用筆尖或情節提要? 如果你有一個UIViewController ,你可以給它取名直線上升在屬性檢查器(或⌥⌘4)

在“屬性”檢查器中使用界面構建器

不幸的是,如果File Owner是UIViewController子類,那么您將無法通過這種方式訪問​​它,這僅僅是因為XCode將File Owner注冊為“外部對象”,並且沒有顯示它的配置面板。 :(

多個標題,同一視圖控制器

但是有時候,您只是想用不同的名稱命名

// 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"];

您也可以使用導航項來執行此操作,但是這將需要比我不滿意的更多的體操運動。

但是可以在代碼中完成,最好直接在Storyboard中進行設置。 怎么樣?

只需點擊控制器內的相應選項卡欄項目( 不在TABBAR CONTROLLER內 )。

在此處輸入圖片說明

然后在“ 實用程序”面板上切換到attribute inspector

在此處輸入圖片說明

現在您可以更改所有內容:-)

迅捷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;
}

您可能想在UITabBarController :: viewDidLoad中執行此操作,在這種情況下,您需要設置視圖控制器的標題,因為此時標簽欄項當前為0。 所以用

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

這是更改標簽欄圖標的名稱和圖像的方法:

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

我正在使用Xcode版本8.2.1(8C1002),這對我有用:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM