如何从控制器内部关闭 TabBar 控制器?
Posted
技术标签:
【中文标题】如何从控制器内部关闭 TabBar 控制器?【英文标题】:How can I close a TabBar Controller from inside the Controller? 【发布时间】:2012-10-23 16:29:04 【问题描述】:我有一个带有动态添加选项卡的 TabBar 控制器。添加选项卡很容易——我只需获取[self viewControllers]
数组,添加一个新的视图控制器,然后使用[self setViewControllers]
来更新TabBar。现在,我希望能够在添加的视图控制器之一中按下按钮,将其从 TabBar 中移除。
我可以将添加的视图控制器中的 self
与 [[self tabBarController] viewControllers]
数组进行比较,以找到要删除的匹配项?
我不能使用标签的标题,因为可能有重复。我尝试将self
与项目进行比较,但实际上它是数组中的[self parentViewController]
。我不能使用parentViewController
,因为在“更多”菜单中打开视图时,parentViewController
是“更多”视图控制器。我不知道有任何方法可以访问 View 的直接父级中的信息,包括 tag
。
任何提示都会很棒,在此先感谢!
例如,这是我当前的代码。它有效,但在选项卡处于“更多”菜单时。当 TabBar 中的视图控制器中的按钮被按下时运行:
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];
【问题讨论】:
【参考方案1】:啊,现在我觉得有点傻。我确定我以前尝试过这个,其他答案敦促不要这样做,但是......
我可以使用[[self tabBarController] selectedIndex]
来获取当前选中标签的数组中的位置,然后移除该位置的对象。这正是我所寻找的 - 快速高效,无需太多额外代码。
它完全按预期工作。当用户重新排序项目时,数组也会重新排序;所以当初始索引发生变化时,用户按下关闭按钮时的索引是数组中控制器的索引。
嗯,我终于明白了……
【讨论】:
以上是关于如何从控制器内部关闭 TabBar 控制器?的主要内容,如果未能解决你的问题,请参考以下文章
如果通过 segue 从另一个 Tab 进入,如何从控制器中删除 TabBar?
如何从自定义集合视图单元(使用 xib 创建的单元)到 tabBar 控制器创建自定义 segue