我有一个与外部实体通信的应用。如果该实体的开关打开或关闭,我需要在标签栏上显示或隐藏项目。
如果用户从实体A更改为实体B并且具有不同的设置,则必须是动态的。标签栏项目需要显示/隐藏,如果他们切换和设置不同。
我曾经在UITabBarController中添加一个项目,如下所示:
UIViewController *vc1 = [[MyViewController1 alloc] init];
[self.tabBarController addChildViewController:vc1];
UIViewController *vc2 = [[MyViewController2 alloc] init];
[self.tabBarController addChildViewController:vc2];
我可以从标签栏中删除项目,如下所示:
NSMutableArray *tbViewControllers = [NSMutableArray arrayWithArray:[self.tabBarController viewControllers]];
[tbViewControllers removeObjectAtIndex:4];
[tbViewControllers removeObjectAtIndex:4];
[self.tabBarController setViewControllers:tbViewControllers];
在我的ViewController代码中我有这样的东西:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
//get the tab bar item
UITabBarItem *tbi = [self tabBarItem];
//give it a label
[tbi setTitle:@"Tab Item"];
//create a UIImage from a file
UIImage *i = [UIImage imageNamed:@"image.png"];
//put that image on the tab bar item
[tbi setImage:i];
}
return self;
}
现在,随着自适应应用程序布局和segues的出现,似乎动态添加项目不起作用。至少对我而言。
我得到一个黑色的屏幕,而不是我希望在做上述操作时看到的视图。有问题的UIView基本上是一个UIWebView,上面有几个自定义按钮。
我的应用程序是完全自适应布局,与UIStackViews兼容。
在现代自适应布局之前,我在这里看到的所有帖子都引用了UITabBars中的添加或删除项目都已有几年了。
是否仍然可以在标签栏中添加/删除标签项?这样做是否可取或现在是不好的做法?
要实现同一目标的任何其他想法,如果根据外部设置在标签栏上设置项目?
干杯,
TJ
答案 0 :(得分:0)
我找到了自己的解决方案,并分享它以帮助他人。
诀窍是如何创建UIViewController。
执行此操作的新方法是通过从故事板中实例化来创建视图控制器。
我从this question找到了这个想法。
创建和添加TabView的方式如下:
// Get a reference to the Tab View Controllers array
NSMutableArray *tbViewControllers = [NSMutableArray arrayWithArray:[self.tabBarController viewControllers]];
// Get a reference to the storyboard
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];
// Instantiate a new instance of the ViewController
UIViewController *vc1 = [sb instantiateViewControllerWithIdentifier:@"MyVC"];
// Add the new view controller to the array at the desired location
[tbViewControllers insertObject:vc1 atIndex:tbViewControllers.count-1];
// Set the tab bar controllers to the newly augmented array
[self.tabBarController setViewControllers:tbViewControllers];
就是这样。视图控制器按照我的预期工作。没有黑屏。
希望这有助于其他人。