RDVTabBarController 小记

来源:互联网 发布:ipad如何登陆淘宝卖家 编辑:程序博客网 时间:2024/06/07 15:06

今天接到一个需求,在push进模块进入后,再push进一个有tabbar的界面。就果断用了RDVTabBarController来实现。

问题

这个tabbar包含三个子界面,VcA、VcB、VcC,添加后发现在子界面写的导航栏标题、导航栏按钮都没有显示。
如:

self.title = @"名片夹";self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"添加名片" style:UIBarButtonItemStylePlain target:self action:@selector(addCard)];

原因

导航栏是属于这个tabbar控制器的,所以在VcA中控制导航栏失败。


解决过程

过程一

所以改为以下代码,失败:
self.tabBarController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"添加名片" style:UIBarButtonItemStylePlain target:self action:@selector(addCard)];


过程二

改为以下代码,成功显示:
self.rdv_tabBarController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"添加名片" style:UIBarButtonItemStylePlain target:self action:@selector(addCard)];


过程三

上述代码含有太多初始化信息,可以初始化之后,再赋值给tabbarVC

self.title = @"名片夹";self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"添加名片" style:UIBarButtonItemStylePlain target:self action:@selector(addCard)];self.rdv_tabBarController.navigationItem.rightBarButtonItem = self.navigationItem.rightBarButtonItem;    self.rdv_tabBarController.title = self.title;

可是,这样就要一个个到子控制器里面去改。


最终方案

于是在tabbar的代理方法中添加了下面代码,解决了上面的问题。

- (BOOL)tabBarController:(RDVTabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{self.title = viewController.title;self.navigationItem.rightBarButtonItem = viewController.navigationItem.rightBarButtonItem;    return YES;}

注意:
需要在tabbar的控制器viewDidLoad的时候,即使加上选中控制器的代码,也不会显示第一个控制器的标题。因为子控件的title 和 导航栏按钮是在子控制器的viewDidLoad中创建的。
所以还是需要在第一个子控制器中写上:

self.rdv_tabBarController.navigationItem.rightBarButtonItem = self.navigationItem.rightBarButtonItem;    self.rdv_tabBarController.title = self.title;

原创粉丝点击