2016-10-17 37 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

很高兴能有帮助 –

相关问题