簡體   English   中英

如何在 Objective-C 中返回(currentView-2)UIViewController?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM