2016-10-17 87 views
0

當我嘗試在UIViewController的子類中將UITabBarDelegate設置爲self時,遇到應用程序崩潰問題。我有一個UITabBarViewController與幾個TabItems鏈接到視圖控制器。其中一個視圖控制器是HomeViewController。我在HomeViewController以下代碼:將UITabBarDelegate設置爲UIViewController時,應用程序崩潰

class HomeViewController: UIViewController, UITabBarDelegate { 
     override func viewDidLoad() { 
     super.viewDidLoad() 
     self.tabBarController?.tabBar.translucent = false 
     self.extendedLayoutIncludesOpaqueBars = true 
     self.tabBarController?.tabBar.delegate = self //This is causing crash 
    } 
} 

如果我刪除self.tabBarController?.tabBar.delegate = self行一切工作正常,我的TabBar表現不如預期,但是當我重新添加該行出現以下崩潰:

ibc++abi.dylib: terminating with uncaught exception of type NSException 

不完全確定如何解決此問題。在SO上發現了一些其他的答案,但他們似乎還不清楚該過程是怎麼做的。

謝謝!

+0

捕獲異常,並打印使用此 '打印(exception.localizedDescription)異常的描述' 那麼請告訴它說什麼 –

+0

你UITabBarViewController已經委託給你的UITabBar 。爲什麼你需要將委託設置爲另一個viewController? –

+0

我有一個在HomeViewController中的方法,我想在tabBar項目「Home」被觸摸時執行。有一個更好的方法嗎? –

回答

1

您的UITabBarViewController已經是您的UITabBar的代表。而不是讓你的viewController你的tabBarDelegate,使用你的tabBarViewController並把你的邏輯在那裏。

你可以做這樣的事情。在tabBarViewController的didSelectItem委託方法

override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) 
{ 
    let index = tabBar.items?.indexOf(item) 

    if (index == /*the required index of HomeViewController*/) 
    { 
     let homeVC = self.viewControllers.objectAtIndex(index) as! HomeViewController 
     homeVC.myMethod() 
    } 

} 
+0

是的,這工作。非常感謝您的幫助! –

+0

很高興能有幫助 –

相關問題