嗨,我有以下故事板變化圖像,利用故事板
正如你可以看到有5個選項卡的標籤欄的應用程序,在我已經分配的標識爲每個標籤的故事板。現在,當用戶單擊特定視圖中的單元格時,我想更改其中一個選項卡的圖像。我怎樣才能做到這一點?我沒有標籤欄視圖控制器或項目的實例,因爲故事板幾乎爲我做了所有這些。所以我的問題是我必須執行哪些方法才能更改圖像?如果我需要標籤欄控制器,我怎樣才能得到它的實例,以及我應該指向哪個類?
非常感謝你,
嗨,我有以下故事板變化圖像,利用故事板
正如你可以看到有5個選項卡的標籤欄的應用程序,在我已經分配的標識爲每個標籤的故事板。現在,當用戶單擊特定視圖中的單元格時,我想更改其中一個選項卡的圖像。我怎樣才能做到這一點?我沒有標籤欄視圖控制器或項目的實例,因爲故事板幾乎爲我做了所有這些。所以我的問題是我必須執行哪些方法才能更改圖像?如果我需要標籤欄控制器,我怎樣才能得到它的實例,以及我應該指向哪個類?
非常感謝你,
在任何UIViewController
類是標籤欄層次結構的一部分,所有你需要做的標籤欄控制器的情況下得到的是:
//In UIViewController
UITabBarController *tabBarController = self.tabBarController;
你然後可以改變圖像作爲這樣
//Suppose you want to change the 1st (0th) tab bar image
UITabBarItem * tabItem = [tabBarController.tabBar.items objectAtIndex: 0];
tabItem.image = //whatever image you want to change to
每個UIViewController中有一個名爲tabBarItem
屬性其是UITabBarItem
該標籤欄共ntroller用來設置表示該控制器的圖像。您可以操縱它來更改有問題的控制器的圖像。
我發現 - 至少在使用Swift的Xcode 6.1.1中 - tabBarItem的直接操作對我無效。
不過,@ borrrden的回答讓我走上了正軌。 Apple's documentation for UITabBarController說得很清楚:
你不應該直接訪問標籤欄控制器 的標籤欄視圖。要配置選項卡欄控制器的選項卡,請將爲每個選項卡提供根視圖的視圖控制器分配給 viewControllers屬性。
...
標籤欄項通過它們的相應的視圖 控制器,被配置。要將標籤欄項目與視圖控制器相關聯,請創建 UITabBarItem類的新實例,爲視圖控制器適當地配置它 ,並將其分配給視圖控制器的 tabBarItem屬性。
因此,根據這個,下面是我想到的那個對我有用的東西。
它是用Swift編寫的,我希望未來的讀者可以根據需要翻譯它(我也將圖像名稱更改爲超類)。
我還使用了UIImage的imageWithRenderingMode方法,所以我可以使用自定義圖像,而不是iOS創建的陰影輪廓默認圖像(我希望認爲@ NSHeffalump的回答爲here)。
if let viewControllers = tabBarController.viewControllers as? Array<UIViewController> {
var tabBarItemImageNames = ["TabBarItemImage0","TabBarItemImage1","TabBarItemImage2","TabBarItemImage3","TabBarItemImage4"]
var vcIndex = 0
for vc:UIViewController in viewControllers {
let selectedImage = UIImage(named: tabBarItemImageNames[vcIndex])?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
let image = UIImage(named: tabBarItemImageNames[vcIndex])?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
var tabBarItem = UITabBarItem(title: "", image: image, selectedImage: selectedImage)
vc.tabBarItem = tabBarItem
vcIndex++
}
}
不,不,不!你不能這樣做......從關於「tabBar」屬性的文檔中:「你永遠不應該試圖操縱存儲在這個屬性中的UITabBar對象本身,如果你嘗試這樣做,標籤欄視圖會拋出一個異常。要爲標籤欄界面配置項目,您應該將一個或多個自定義視圖控制器分配給viewControllers屬性。標籤欄從您指定的視圖控制器收集所需的標籤欄項目。「 – borrrden 2012-07-26 02:05:28
感謝您的答案!它確實工作borrrden – 2012-07-27 02:22:19