2012-10-23 78 views
0

我有一个带有动态添加标签的TabBar控制器。添加标签很简单 - 我只需获取[self viewControllers]数组,添加一个新的View Controller,并使用[self setViewControllers]更新TabBar。现在,我希望能够在添加的视图控制器之一中按下按钮将其从TabBar中删除。如何关闭控制器内部的TabBar控制器?

我可以在添加的视图控制器中将self[[self tabBarController] viewControllers]数组进行比较,以找到要删除的匹配项?

我无法使用标签的标题,因为可能有重复。我尝试将self与项目进行比较,但实际上它是[self parentViewController]。我无法使用parentViewController,因为在“更多”菜单中打开视图时,parentViewController是“更多”视图控制器。我不知道有什么方法可以在视图的直接父级中访问信息,包括tag

任何提示将是伟大的,并提前感谢!

作为一个例子,这里是我目前的代码。它可以工作,但当选项卡位于“更多”菜单中时不会。当TabBar中View Controller中的按钮被按下时,这个按钮被运行:

NSMutableArray *temp = [[NSMutableArray alloc] initWithArray:[[self tabBarController] viewControllers]]; 
for (int i = 0; i < [temp count]; i++) 
{ 
    UIViewController *test = [temp objectAtIndex:i]; 
    if (test == [self parentViewController]) 
    { 
     [temp removeObject:test]; 
     break; 
    } 
} 
[[self tabBarController] setViewControllers:temp]; 

回答

0

啊,现在我觉得有点蠢。我确信我之前已经尝试过,并且其他答案强烈建议不要这样做,但是...

我可以使用[[self tabBarController] selectedIndex]来获取当前所选标签的数组中的位置,然后移除位置上的对象。这正是我所需要的 - 快速高效,无需额外的代码。

它完全按预期工作。当用户重新排序项目时,阵列也会重新排序;因此在初始索引更改时,用户按下“关闭”按钮时的索引是数组中控制器的索引。

嗯,我把它弄到底了......