我UITabViewController
正在运行UINavigationController
。在每个选项卡中,我有一个不同的TableView
s,它们是我的应用程序树的根。
当我点击表格的某个项目时,它会进入下一个级别,在屏幕上查看另一个详细的TableView
,仍然有TabBar
和NavigationBar
。它完美无缺,除了一件事。如果我在一个选项卡中查看详细信息,然后切换到另一个选项卡,然后再返回,然后我仍然可以看到我的详细信息。我想要实现的是在离开后重置标签。
我希望我必须在viewDidUnload
或simmilar中放置一些东西,但找不到合适的解决方案。
希望你能提供帮助。
答案 0 :(得分:4)
at
- (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>
这将让编译器知道应用程序委托必须或可能具有协议中声明的方法,并且还将为您提供方便的自动编译方法。
答案 1 :(得分:0)
执行此操作的一种方法是获取与tabviewcontroller关联的视图控制器,然后创建新对象。
self.tabBarController?.viewControllers!将获得标签栏的viewControllers数组。在我的例子中,他们是UINavigationControllers,但他们可以是任何东西。然后我得到与之关联的viewController并重置它。
如果你没有导航控制器,你可以创建新的视图控制器对象并继续使用它。
下面的是我案例中的解决方案(使用navcontroller)
let vc = self.tabBarController?.viewControllers![0] as! UINavigationController
let newVC = YourViewControllerClass()
vc.viewControllers[0] = newVC as UIViewController
这将用旧的vc替换旧的(已填充的)vc!