如何从控制器内部关闭 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

当我在基于选项卡的应用程序中从一个控制器导航到另一个控制器时,tabBar 被隐藏

从标签栏控制器模态显示视图

从视图控制器加载 Tabbar 控制器

如何从呈现的视图控制器上的按钮操作推送视图控制器