我正在使用 monotouch 开发 ios 应用程序。假设我有 3 个屏幕:s1、s2 和 s3。用户可以像这样打开它们: s1 -> s2 -> s3 。
我希望如果用户打开 s2,它可以通过导航返回按钮返回到 s1 屏幕,但如果它通过按导航栏中的返回按钮返回到 s3 屏幕,则应用程序返回到 s1 没有 s2。
ios里面可以吗?在android上,如果你使用NoHistory
属性,你可以实现这个功能,在ios中是否也有任何等价物?
我正在使用 monotouch 开发 ios 应用程序。假设我有 3 个屏幕:s1、s2 和 s3。用户可以像这样打开它们: s1 -> s2 -> s3 。
我希望如果用户打开 s2,它可以通过导航返回按钮返回到 s1 屏幕,但如果它通过按导航栏中的返回按钮返回到 s3 屏幕,则应用程序返回到 s1 没有 s2。
ios里面可以吗?在android上,如果你使用NoHistory
属性,你可以实现这个功能,在ios中是否也有任何等价物?
您可以在您的 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
.
你可以试试这个
后退按钮按下:
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];