2

我正在使用 monotouch 开发 ios 应用程序。假设我有 3 个屏幕:s1、s2 和 s3。用户可以像这样打开它们: s1 -> s2 -> s3 。

我希望如果用户打开 s2,它可以通过导航返回按钮返回到 s1 屏幕,但如果它通过按导航栏中的返回按钮返回到 s3 屏幕,则应用程序返回到 s1 没有 s2。

ios里面可以吗?在android上,如果你使用NoHistory属性,你可以实现这个功能,在ios中是否也有任何等价物?

4

2 回答 2

3

您可以在您的 navigationController 中手动编辑视图控制器以删除 s2。

您可以使用self.navigationController.viewControllers获取当前堆栈,并[self.navigationController setViewControllers:animated:]设置堆栈。

在您的情况下,您可能想要执行以下操作:

NSMutableArray *views = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers];
[views removeObjectAtIndex:1];
[self.navigationController setViewControllers:views animated:NO];

如果您在 s3 viewController 中调用它,它将获取堆栈上的 viewController,删除第二个(索引 1 处的对象),并将它们设置为新堆栈。动画:NO 只是让它在没有动画的情况下立即完成。

请注意,您可能想要更改这行代码,以便如果您在没有 s2 的情况下进入 s3,它不会弹出 s3。此外,如果 s2 和根目录之间存在另一个视图,则您要删除的视图可能不是objectAtIndex:1.

于 2013-08-04T22:18:45.483 回答
0

你可以试试这个

后退按钮按下:

for (UIViewController * viewController in self.navigationController.viewControllers)
{
    if ([viewController isKindOfClass: NSClassFromString(@"<ClassName for S3>")])
    {
         [self.navigationController popToViewController: [self.navigationController.viewControllers objectAtIndex: 0] animated: NO];
          break;
    }
}

或者你也可以使用

   [self.navigationController popToRootViewControllerAnimated: NO];
于 2013-08-05T05:23:05.727 回答