我在运行时以编程方式更改标签栏的标签栏项。 我的应用程序的整个UI都使用了Storyboard,这是我在代码中进行UI更改的唯一区域。
因此,UI会根据属性而变化。如果找不到此属性,则viewControllers数组将更改为包含新UIView的新数组。
这是我的TabBarController.m代码:
NSArray *arrayOfControllers = self.viewControllers;
NSMutableArray *newArrayOfControllers = [[NSMutableArray alloc]init];
for (id controller in arrayOfControllers)
{
[newArrayOfControllers addObject:controller];
}
if ( !isMember)
{
NotMemberVC *vc = [[NotMemberVC alloc]init];
vc.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Test" image:[UIImage imageNamed:@"door-sign.png"] tag:0];
[newArrayOfControllers removeLastObject];
[newArrayOfControllers addObject:vc];
self.viewControllers = newArrayOfControllers;
}
以下是我选择此新标签栏项目时的样子:
有关如何解决这个问题的任何建议吗?
答案 0 :(得分:0)
首先,当你有一个方法来执行数组的mutableCopy
时,你不需要做一个for循环:
NSArray *arrayOfControllers = self.viewControllers;
NSMutableArray *newArrayOfControllers = [arrayOfControllers mutableCopy];
然后在这里,你没有使用视图初始化viewController 。在这种情况下你的VC中有你的故事板中的UIView ,所以你必须在故事板中的VC中选择一个StoryboardID ,然后:
if ( !isMember)
{
NotMemberVC *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"Your_Identifier_ViewController_Storyboard"];
vc.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Test" image:[UIImage imageNamed:@"door-sign.png"] tag:0];
[newArrayOfControllers removeLastObject];
[newArrayOfControllers addObject:vc];
//Here make a copy to come back to immutable array
self.viewControllers = [newArrayOfControllers copy];
}