2016-02-17 25 views
3

我已經通過界面構建​​器將UITabBar添加到我的應用程序,併成功將選項卡鏈接到其他視圖控制器中的選項卡欄項目,並很好地運行它們之間的應用程序切換。我將如何去檢測一個標籤被按下?我想在選中時在選定的選項卡視圖控制器類中調用一個函數。正如你可能會告訴我,我很新,所以解釋非常感謝。當UITabBar項目選擇swift時檢測到

我無法找到最近的答案,所有答案似乎是非快速或非常舊版本的xcode。

+0

有一個名爲didSelectItem的委託方法,當你點擊任何標籤項時它會被調用。 –

+0

我已經儘可能將UITabBarDelegate添加到包含其中一個選項卡項目的視圖控制器的類行,但我不確定下一步是什麼? – burg93

+0

你必須在tabbarcontroller中做到這一點。 –

回答

8

你不希望你的視圖控制器的基類是一個UITabBarDelegate。如果你這樣做,你所有的視圖控制器子類將是標籤欄代表。我想你想要做的是延長的UITabBarController,這樣的事情:

class MyTabBarController: UITabBarController, UITabBarControllerDelegate { 

然後,在這個類,覆蓋viewDidLoad中並在那裏設置委託財產自我:

self.delegate = self 

注意:這是設置標籤欄控制器委託。標籤欄有它自己的委託(UITabBarDelegate),標籤欄控制器管理它,並且不允許更改。

所以,現在這個類既是UITabBarDelegate(因爲的UITabBarController實現該協議),並UITabBarControllerDelegate,你可以重寫/根據需要實現這些委託的方法,如:

// UITabBarDelegate 
override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) { 
    print("Selected item") 
} 

// UITabBarControllerDelegate 
func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) { 
    print("Selected view controller") 
} 

我猜你可能對後者更感興趣。查看文檔以查看每個代表提供的內容。

最後,在您的故事板(假設您正在使用故事板)中,將標籤欄控制器的類設置爲Identity Inspector中的MyTabBarController,並且您很好。

+0

沒關係發現它就像放上「item.tag」一樣簡單。非常感謝您的幫助。 – burg93

+0

很高興你的工作 – Anokrize

相關問題