我有一个标签栏项目,开头有一个标签,视图控制器有按钮。如果点击一个按钮 - 预计特定的视图控制器将添加到tabbarcontroller / tab项目。但每次按下按钮时,都会添加相同的viewcontroller / 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];
}
答案 0 :(得分:0)
您可以在头文件中声明Tableview,如下所示:
UITableViewController *TableView;
现在您可以检查Viewcontroller是否已存在:
if(!TableView){
//your code here
//instantiate TableView ad add it to the TabBar.
}
这样,它只会在第一个buttonTap上执行。
编辑:
当然这个wold要求你为你拥有的每个按钮声明一个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];
}
现在,您可以添加更多按钮,而无需在标题中添加更多变量。 玩得开心。