在iOS6中使用故事板对UITabBarController进行子类化

时间:2013-07-26 15:09:20

标签: ios uitabbarcontroller uistoryboard

我用iOS 6 ARC和Storyboards开始了一个新项目

我制作了一个非常简单的应用程序,它有一个Tabbar和2个视图

enter image description here

所以现在我创建了一个TestViewController文件,扩展了UITabBarController并将自定义类放在了故事板中。

现在的问题是我正在尝试实现一些委托方法,比如

- (BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController;

但它从不称呼它。有人可以帮忙吗?

我也注意到,如果我将该代码放在第一个视图控制器中,它可以正常工作。看起来第一个视图控制器之前会覆盖TabBarController。我很困惑。

为了进行更多测试,我在TestViewController.m中添加了一些日志记录:

- (void)viewDidLoad { 
   [super viewDidLoad];
   // Do any additional setup after loading the view.
   NSLog(@"%@",self.tabBarController.viewControllers);
}

并且视图控制器为空。

我甚至试过self.tabBarController.delegate = self;

但仍然没有解决方案。

2 个答案:

答案 0 :(得分:1)

TestViewController是您的标签栏控制器,因此您的日志应该只是self.viewControllers,而不是self.tabBarController.viewControllers。您也不需要添加属性viewControllers,因为您的子类从UITabBarController继承该属性。您的委托消息未被调用的原因是同样的问题。您应该使用(在TestViewController中)设置委托:

self.delegate = self;

这假设您希望TestViewController成为委托人,如果您想要的话,我不清楚。

答案 1 :(得分:0)

您是否尝试在Interface Builder中链接它们? 首先将它添加到头文件中 @property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;