【问题标题】:How to clear or resetting UINavigation history?如何清除或重置 UINavigation 历史记录?
【发布时间】:2011-08-13 23:29:50
【问题描述】:

我有一个使用 UINavigation 的游戏设置屏幕,并且在有人选择颜色后尝试重置或清除 UINavigation。

下图最好地描述了我的应用的当前流程:

Start application -> New game -> Pick character -> Pick Color -> Start game

直到“选择颜色”我使用uinavigation,但是当挑选颜色时,我想清除uinavigation历史记录。

这样做的原因是,一旦您开始游戏,您就无法返回,并且希望 UINavigation 以干净的状态恢复,而没有任何迹象表明您可以返回(这也包括返回main menu 屏幕)。

我现在的做法是这样的;

[self.navigationController popToRootViewControllerAnimated:YES];

GameDashboardVC *dashboard = [[GameDashboardVC alloc] initWithNibName:@"GameDashboardVC" bundle:nil];
dashboard.title = @"Dashboard"; 
dashboard.managedObjectContext = self.managedObjectContext;

[self.navigationController pushViewController:dashboard animated:YES];

[dashboard release];

问题是它弹出到 rootViewController 但它从不将仪表板推送到堆栈上。

我试过了:

[self.parentViewController.navigationController pushViewController....]

我唯一没有尝试过的是将仪表板推送放在根视图控制器本身,但我很担心,因为我不确定它是否应该在那里。

因此,放置此类功能的正确位置在哪里,以及如何清除 UINavigation 的堆栈。

感谢您的时间/帮助。

【问题讨论】:

  • 检查你的 UINavigationController viewControllers 属性并扔掉你不想要的?

标签: objective-c uinavigationcontroller history


【解决方案1】:

如果要重置 UINavigation 历史记录,请重新初始化导航控制器。

如果您使用 AppDelegate 类中的 UINavigationController。您可以重新初始化导航历史记录。

appDelegate.navigationController=[[UINavigationController alloc]init];

以上代码将重置 navigationController 历史记录..

【讨论】:

    【解决方案2】:

    我现在满意地解决了这个问题。

    我将以下代码放入我的 initWithNibName 方法中:

    self.navigationItem.hidesBackButton = YES;
    

    这隐藏了后退按钮,我不必弹出任何东西,但我认为出于记忆的原因,保留从堆栈中删除不需要的项目的想法可能很有用。

    但现在上面的就可以了。

    【讨论】:

    • 我做了另一个解决方案,我将所有“新游戏初始化”内容放在具有自己的导航的模态视图中。模态视图方式同样有效,并且可以被认为更合乎逻辑。唯一的问题是当您删除模式并将主菜单视图推送到堆栈上时。话虽如此,任何一种方式似乎都有效。
    猜你喜欢
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    相关资源
    最近更新 更多