【问题标题】:How to check if a TabBar item is already present before adding at run time?如何在运行时添加之前检查 TabBar 项是否已经存在?
【发布时间】:2013-06-07 04:39:11
【问题描述】:
我有一个标签栏项目,开头有一个标签,视图控制器有按钮。如果点击了一个按钮 - 一个特定的视图控制器应该被添加到 tabbarcontroller/tab 项中。但是每次我按下按钮时,都会添加相同的视图控制器/选项卡项目(相同的多个选项卡项目)。我试图为一个 Viewcontroller 限制一个选项卡项,无论该按钮被点击多少次。任何帮助,将不胜感激。
-(IBAction) buttontap:id(sender){
UITableViewController*TableView = [mainStoryBoard instantiateViewControllerWithIdentifier:@"Table A"];
TableView.title = @"Table A";
NSMutableArray *TabBarItems = [NSMutableArray arrayWithArray:self.tabBarController.viewControllers];
if ([self.tabBarController.tabBarItem.title.description isEqualToString:@"Table A"])
{
[TabBarItems addObject:nil];
}
else
{
[TabBarItems addObject:TableView];
TableView.tabBarItem.image = [UIImage imageNamed:@"contents.png"];
}
[self.tabBarController setViewControllers:TabBarItems];
}
【问题讨论】:
标签:
ios
uitabbarcontroller
uitabbar
uitabbaritem
【解决方案1】:
您可以像这样在头文件中声明 Tableview:
UITableViewController *TableView;
现在您可以检查 Viewcontroller 是否已经存在:
if(!TableView){
//your code here
//instantiate TableView ad add it to the TabBar.
}
那样,它只会在第一个 buttonTap 上执行。
编辑:
当然,这需要您为每个按钮声明一个 ViewController。
更动态的方法是使用您创建的可变数组,并使用 -(BOOL)isEqual: 将每个项目与新创建的 viewController 进行比较:
UITableViewController*TableView = [mainStoryBoard instantiateViewControllerWithIdentifier:@"Table A"];
NSMutableArray *TabBarItems = [NSMutableArray arrayWithArray:self.tabBarController.viewControllers];
BOOL found = NO;
for (UIViewController *vc in TabBarItems){
if([vc isEqual:TableView]){
found=YES;
}
}
if(!found){
[TabBarItems addObject:TableView];
TableView.tabBarItem.image = [UIImage imageNamed:@"contents.png"];
[self.tabBarController setViewControllers:TabBarItems];
}
现在您可以添加更多按钮,而无需在标题中添加更多变量。
玩得开心。