【问题标题】:UIView added programmatically to UITabBarController displays just black以编程方式添加到 UITabBarController 的 UIView 显示为黑色
【发布时间】:2014-06-27 19:14:45
【问题描述】:

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

当我选择这个新的标签栏项目时,它的外观如下:

关于如何解决此问题的任何建议?

【问题讨论】:

  • 在哪里为 NotMemberVC 创建视图?
  • 视图已在我的单个 Storyboard 中创建
  • 那你需要用 UIStoryboard 方法创建控制器,instantiateViewControllerWithIdentifier:,而不是 alloc init。
  • 嗯,我不知道该怎么做。您有任何示例代码或链接可以告诉我如何执行此操作吗?这是我完全用代码创建的第一个视图,所以我有点迷茫
  • 哦,你的意思是不是这个:NotMemberVC *vc = [[NotMemberVC alloc]init];?

标签: ios uiview uitabbarcontroller


【解决方案1】:

首先,当你有一个方法来做数组的mutableCopy时,你不需要做一个for循环:

NSArray *arrayOfControllers = self.viewControllers;
NSMutableArray *newArrayOfControllers = [arrayOfControllers mutableCopy];

那么这里,你没有用视图初始化 viewController。在这种情况下,你的 VC 和你的 Storyboard 中有 UIView,所以你必须在 Storyboard 的 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];
}

【讨论】:

  • 谢谢你,Matteo,你值得喝啤酒!
  • 不客气,但不要忘记将此设置为正确答案,这对这个社区来说是最重要的。
  • 我做了...我只是因为一些奇怪的原因等了 3 分钟。
  • np ;) 享受您的应用!
猜你喜欢
  • 1970-01-01
  • 2011-09-01
  • 2011-10-27
  • 2016-01-22
  • 2018-09-29
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 2019-07-25
相关资源
最近更新 更多