[英]How to go back to (currentView-2) UIViewController in Objective-C?
我试图回到以前的UIViewContoller
。
我这样做的方法是使用这段代码
。H
@property(nonatomic, copy) NSArray *viewControllers;
.m
[Event saveInBackgroundWithBlock:^(BOOL succeeded, NSError * _Nullable error) {
self.viewControllers = self.navigationController.viewControllers;
NSLog(@"Viewcontroller stack : %@", self.viewControllers);
[self.navigationController pushViewController:[self.viewControllers objectAtIndex:self.viewControllers.count-2] animated:YES];
}];
}];
在self.viewControllers
我存储了 UIViewController 堆栈,但它只打印当前的一个,比如 。 在层次结构中,我在各种视图中有 UINavigationControllers。
此外,该应用程序因以下错误而崩溃:
* 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[__NSSingleObjectArrayI objectAtIndex:]:索引 18446744073709551615 超出范围 [0 .. 0]”
编辑:
我试过这个:
MyEventsViewController *tomyevents = [[MyEventsViewController alloc] initWithNibName:@"MyEventsViewController" bundle:nil];
[self.navigationController popToViewController:tomyevents animated:YES];
我收到以下错误:
*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“试图弹出一个不存在的视图控制器。”
编辑2:
我正在使用模态转场
进入导航控制器的堆栈并尝试将视图控制器从 stac 的中间推到顶部是非常错误的,并且会导致不好的事情发生。
将导航控制器堆栈视为一堆盘子。 您可以将一个新的视图控制器推到堆栈的顶部,或者从堆栈中弹出任何数字以从下面显示一个,但是您不能从堆栈的中间取出一个视图控制器并将其放在顶部。 这将导致堆栈翻倒并破裂。
要弹出到特定的视图控制器,请使用popToViewController(_:animated:)
您向该方法传递一个指针,该指针从当前堆栈中指向您希望位于堆栈顶部的视图控制器。 导航控制器将根据需要从其顶部弹出尽可能多的视图控制器,使其成为新的顶视图控制器。
如果您知道要弹出 n-2 视图控制器,您的代码可能如下所示:
[Event saveInBackgroundWithBlock:^(BOOL succeeded, NSError * _Nullable error) {
NSArray *navStack = self.navigationController.viewControllers;
//Fetch the count-2 view controller from the stack
if (navStack.count <3) {
return;
}
UIViewController *nMinusTwo = [navStack objectAtIndex: navStack.count-2];
[self.navigationController popToViewController: nMinusTwo, animated: YES];
}];
}];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.