[英]Change the UIVIewController of a tab in UITabBarController
[英]Change tab name in uitabbarcontroller
我有一個TabBarController設置為主控制器選項卡,其中使用接口生成器定義名稱。 現在,我想以編程方式更改其名稱。
怎么做?
自從我最初的回答以來,發生了很多事情:Swift 3,情節提要等。標題通常是所有視圖共享的標題,可以在屬性檢查器中設置
此外,為了獲得更多控制,您始終可以從設計器視圖中拖動UITabBarItem
和UINavigationItem
元素。 您必須將它們拖到標簽欄/導航控制器中將要顯示的視圖上。 基本上,他們將信息存儲為“我想這樣顯示在選項卡欄中”。
Hello Scene將添加一個TabBarItem,因此可以對其進行配置。
這兩個元素的行為與通過代碼訪問視圖控制器的.tabBarItem
和.navigationItem
屬性完全相同。 如果這些屬性是對應對象的子代(nav具有navItem,而tab具有tabItem),則它們始終存在於代碼中,無需將它們添加到Storyboard / xib中即可。
最后一件事有點令人困惑,因為在情節提要/ xib中似乎是將它們添加到視圖控制器中,但實際上您只是在說“ nib也將配置這些屬性”。
標簽欄上顯示的名稱來自UIViewController
的title
屬性,
self.title = @"Name me!";
您可以隨時更改標題,它應該可以更新選項卡欄項上顯示的文本。 但請注意,最好在使用的init
方法(或initWithNibName:bundle:
或initWithCoder:
盡快執行此操作 。
這里的關鍵是,選項卡欄出現在屏幕上時會初始化所有的視圖控制器,因此會立即調用init方法。 如果要在viewDidLoad
上執行此操作,則只有在您實際選擇選項卡時才會調用,然后進行其他調用, awakeFromNib
, viewWillAppear:
, 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];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.