更改 UITabBar 选项卡时关闭 DetailController?

Posted

技术标签:

【中文标题】更改 UITabBar 选项卡时关闭 DetailController?【英文标题】:Dismiss DetailController when UITabBar tab is changed? 【发布时间】:2013-03-22 18:24:26 【问题描述】:

我正在开发一个应用程序,其中我在 UITabBarController 中嵌入了一个 UINavigationControllerUINavigationController 有一个 UITableView,当点击一个单元格时,它会转换为 DetailController

我的问题是:我在 [TAB1] 上选择了一个单元格并转换到 DetailController。如果我选择 [TAB2] 然后返回 [TAB1] 它仍然在细节控制器上。如果选择 [tab2] ,我可以在 [tab1] 上放松/解散 detailcontroller em>(即它显示表格视图时细胞)。

我的另一个想法是这样做不会让 UI 处于用户离开的状态,即在查看 DetailController 并按下 [TAB2] 之后返回 [TAB1] 将向用户显示UITableView 中的单元格。如果您离开 TAB,应用程序恢复 DetailController 感觉更好,这就是我问的原因...

注意:I present the *DetailController* via a push segue from theUITableViewCell.

【问题讨论】:

【参考方案1】:

您可以实现UITabBarControlleDelegate 并在标签更改时使用popToRootViewControllerAnimated: 返回UINavigationController 的根视图。

代码示例:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
    tabBarController.delegate = self;
    return YES;


  - (BOOL)tabBarController:(UITabBarController *)tabBarController
shouldSelectViewController:(UIViewController *)viewController

    UIViewController *currentController = tabBarController.selectedViewController;
    if ([currentController isKindOfClass:[UINavigationController class]])
         [(UINavigationController *)currentController popToRootViewControllerAnimated:NO];
    return YES;

【讨论】:

要实现这一点,您需要将 UINavigationController 设为 UITabBarController 的 UITabBarControllerDelegate。我理解正确吗? 不,您可以将UIAppDelegate设置为UITabBarControllerDelegate的代表 非常感谢谢尔盖,非常感谢您扩展您的答案,现在我明白了。

以上是关于更改 UITabBar 选项卡时关闭 DetailController?的主要内容,如果未能解决你的问题,请参考以下文章

选择 UITabBar 时调用方法?

重新打开选项卡时返回视图层次结构中的初始 ViewController

更改选项卡时视图更改大小

动态创建的选项卡 - 关闭选项卡时销毁对象

更改选项卡时忽略自动旋转

关闭选项卡时如何防止调试器停止