我正在使用monotouch来开发ios应用程序。假设我有3个屏幕:s1,s2和s3。用户可以这样打开它们:s1 - > s2 - > s3。
我希望如果用户打开s2它可以通过导航返回按钮返回到s1屏幕,但是如果它通过按导航栏中的后退按钮进入s3屏幕,则应用程序返回到s1 no s2。
ios有可能吗?在android上如果你使用NoHistory
属性你可以实现这个功能,在ios中是否有任何等价物?
答案 0 :(得分: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中调用它,它将获取堆栈中的viewControllers,删除第二个(索引1处的对象),并将它们设置为新堆栈。动画:不仅仅是为了让它在没有动画的情况下立即完成。
请注意,您可能希望更改此行代码,以便在没有使用s2的情况下进入s3时,它不会弹出s3。此外,如果s2和root之间还有另一个视图,那么您要删除的视图可能不是objectAtIndex:1
。
答案 1 :(得分: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];