UIView以编程方式添加到UITabBarController显示为黑色

时间:2014-05-09 22:30:12

标签: ios uiview uitabbarcontroller

我在运行时以编程方式更改标签栏的标签栏项。 我的应用程序的整个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;
}

以下是我选择此新标签栏项目时的样子: enter image description here

有关如何解决这个问题的任何建议吗?

1 个答案:

答案 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];
}