0

我有UITabViewController运行UINavigationController。在每个选项卡中,我都有一个不同TableView的 s,它们是我的应用程序树的根。

当我单击一个表格项目时,它会进入下一个级别,查看另一个,详细的,TableView仍在屏幕上的。它完美地工作,除了一件事。如果我在一个选项卡中查看详细信息,然后切换到另一个选项卡,然后再返回,那么我仍然可以看到我的详细信息。我想要实现的是在离开后重置标签。TabBarNavigationBar

我希望我必须放入一些东西viewDidUnload或类似的东西,但找不到正确的解决方案。

希望你能帮忙。

4

2 回答 2

4

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController

[viewController.navigationController popToRootViewControllerAnimated:YES];

只要选择了选项卡,就会将选项卡的视图控制器导航到根视图。

将主窗口视图控制器(标签栏控制器)实例保留在应用程序委托中是完全可以的。

您需要添加的是将委托或任何其他初始化类设置为标签栏控制器的委托,如下所示:

myTabBarController = [UITabBarController alloc ...
myTabBarController.delegate = self; // the app delegate will be also the tab bar delegate

在应用程序委托中,然后将以下方法添加到应用程序委托:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
    [viewController.navigationController popToRootViewControllerAnimated:YES];
}

只要选择它的选项卡,“选项卡”条控制器将调用此方法。您还需要让应用程序委托以UITabBarControllerDelegate这种方式确认:

@interface PSAppDelegate : UIResponder <UITabBarControllerDelegate>

这将使编译器知道应用程序委托必须或可能具有在协议中声明的方法,并且还将为您提供非常方便的此方法的自动编译。

于 2012-07-12T14:36:20.597 回答
0

一种方法是获取与 tabviewcontroller 关联的视图控制器,然后创建新对象。

self.tabBarController?.viewControllers!将获得标签栏的视图控制器数组。就我而言,它们是 UINavigationControllers,但它们可以是任何东西。然后我得到与它关联的 viewController 并重置它。

如果您没有导航控制器,您可以创建新的视图控制器对象并使用它。

以下是我的解决方案(使用导航控制器)

 let vc = self.tabBarController?.viewControllers![0] as! UINavigationController
    let newVC = YourViewControllerClass()
    vc.viewControllers[0] = newVC as UIViewController

这用新的替换旧的(填充的)vc!

于 2016-03-01T09:32:50.647 回答