[英]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.