我用iOS 6 ARC和Storyboards开始了一个新项目
我制作了一个非常简单的应用程序,它有一个Tabbar和2个视图
所以现在我创建了一个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;
但仍然没有解决方案。
答案 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;