在NavigationController上重置rootViewController

时间:2013-05-10 12:18:18

标签: ios objective-c uiviewcontroller uinavigationcontroller

我正在使用PKRevealController为应用程序提供侧边菜单功能。

我在侧边菜单中有UI按钮,它们触发了一个视图被推送到导航堆栈上。但是,每个被推送的视图都有一个返回导航视图控制器的后退按钮。

确保推送到堆栈的每个视图都将成为导航堆栈的根目录的正确方法是什么?除了显然不能查看我需要堆叠的控制器。

2 个答案:

答案 0 :(得分:2)

您可以将任何视图控制器作为导航控制器的根视图控制器,例如

你可以尝试这个.....只需在FrontView控制器didSelectRowAtindexPath

中替换此代码
         //    [tableView deselectRowAtIndexPath:indexPath animated:YES];
         self.navigationController.viewControllers = [NSArray arrayWithObject: [[LeftDemoViewController alloc]init]];

答案 1 :(得分:0)

如果您不想推送视图控制器,您可能更喜欢拥有一个主视图,其中包含当前视图控制器的视图。每次更改到另一个应用程序部分时,都会删除该视图,并插入新视图控制器的视图。

但是如果你想要一个导航堆栈,你可以从导航堆栈中删除以前的viewcontroller并添加新的。假设您只有一个视图控制器,并且您正在使用标签栏控制器

UIViewController * root = nil;
UINavigationController *rootNavController = [[[UINavigationController alloc]initWithRootViewController:root] autorelease];
[root release];
NSMutableArray * viewControllersArray = [NSMutableArray arrayWithArray:self.tabBar.viewControllers];
[viewControllersArray removeObject:[viewControllersArray lastObject]];
[viewControllersArray addObject:rootNavController];
[self.tabBar setViewControllers:viewControllersArray animated:NO];

如果你想拥有多个,而不是一直删除最后一个,你必须删除第一个。所以你必须用objectAtIndex:0替换lastObject,用insertObject替换addObject:atIndex:0

希望有所帮助