最近遇到个需求
游客模式下 先加载好UITabBarcontroller
然后登录之后 要根据 服务器返回的一个字段来 判断 改变TabBarcontroller里面的控制器
比方说 i == 0 tabbarcontroller 结构就不变
i ==1 tabbarcontroller 第三个TabBar 就移除当前的控制器
就换成另外的控制器
我总结了2种解决方案 (个人感觉只能将就用用)如果有更好的实现方式 欢迎@我
第一种方式 更换UINavigationController里面的UIViewController
//得到第3个需要变的navi控制器
HBBaseNavigationController *navi = [self.viewControllers objectAtIndex:2];
HBMyAssetsSlideViewController *assets = [[HBMyAssetsSlideViewController alloc] init];
[navi setViewControllers:@[assets] animated:NO];
得到的结果这样
];
修改代码如下
//得到第3个需要变的navi控制器
HBBaseNavigationController *navi = [self.viewControllers objectAtIndex:2];
HBMyAssetsSlideViewController *assets = [[HBMyAssetsSlideViewController alloc] init];
//重新设置更换的视图控制器的属性(感觉多余 可是不写被替换的就空白)
[self addChildVcItem:assets title:@"资产" image:@"TabBar5" selectedImage:@"TabBar5Sel"];
[navi setViewControllers:@[assets] animated:NO];
//重新设置了一下他的标题和TabBar内容
- (void)addChildVcItem:(UIViewController *)childVc title:(NSString *)title image:(NSString *)image selectedImage:(NSString *)selectedImage
{
// 设置子控制器的文字
childVc.title = title; // 同时设置tabbar和navigationBar的文字
childVc.tabBarItem.title = title;
// 设置子控制器的图片
childVc.tabBarItem.image = [UIImage imageNamed:image];
//声明显示图片的原始式样 不要渲染
childVc.tabBarItem.selectedImage = [[UIImage imageNamed:selectedImage]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}
第二种方式 重新布局viewcontrollers
HBMyAssetsSlideViewController *assets = [[HBMyAssetsSlideViewController alloc] init];
HBBaseNavigationController *nav = [[HBBaseNavigationController alloc] initWithRootViewController:assets];
[self addChildVcItem:assets title:@"资产" image:@"TabBar5" selectedImage:@"TabBar5Sel"];
[self setViewControllers:@[[self.viewControllers objectAtIndex:0],[self.viewControllers objectAtIndex:1],nav,[self.viewControllers objectAtIndex:3]] animated:NO];