102

たとえば、5 つの UIViewControllers を持つナビゲーション スタックがあります。5 番目のビュー コントローラーのボタンをクリックすると、スタック内の 3 番目と 4 番目のビュー コントローラーを削除したいと考えています。これを行うことは可能ですか?もしそうなら、どのように?

4

15 に答える 15

179

このコードを使用してお楽しみください:

NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers];

// [navigationArray removeAllObjects];    // This is just for remove all view controller from navigation stack.
[navigationArray removeObjectAtIndex: 2];  // You can pass your index here
self.navigationController.viewControllers = navigationArray;
[navigationArray release];

これがあなたを助けることを願っています。

編集:Swiftコード

guard let navigationController = self.navigationController else { return }
var navigationArray = navigationController.viewControllers // To get all UIViewController stack as Array
navigationArray.remove(at: navigationArray.count - 2) // To remove previous UIViewController
self.navigationController?.viewControllers = navigationArray

編集:最後のViewControllerを除くすべてのViewControllerを削除するには->左上隅に戻るボタンはありません

guard let navigationController = self.navigationController else { return }
var navigationArray = navigationController.viewControllers // To get all UIViewController stack as Array
let temp = navigationArray.last
navigationArray.removeAll()
navigationArray.append(temp!) //To remove all previous UIViewController except the last one
self.navigationController?.viewControllers = navigationArray
于 2012-04-23T13:34:40.017 に答える
50

最初に配列内のすべてのView Controllerを取得してから、対応するView Controllerクラスを確認した後、必要なものを削除できます。

ここに小さなコードがあります:

NSArray* tempVCA = [self.navigationController viewControllers];

for(UIViewController *tempVC in tempVCA)
{
    if([tempVC isKindOfClass:[urViewControllerClass class]])
    {
        [tempVC removeFromParentViewController];
    }
}

これで作業が楽になると思います。

于 2012-04-23T13:42:47.437 に答える
8

スウィフト 2.0:

  var navArray:Array = (self.navigationController?.viewControllers)!
  navArray.removeAtIndex(navArray.count-2)
  self.navigationController?.viewControllers = navArray
于 2016-02-18T06:24:30.283 に答える
5

5 番目の View Controller から 2 番目の View Controller に移動しようとしている場合 (3 番目と 4 番目をスキップ)、 を使用します[self.navigationController popToviewController:secondViewController]

secondViewControllerは、ナビゲーション コントローラー スタックから取得できます。

secondViewController =  [self.navigationController.viewControllers objectAtIndex:yourViewControllerIndex];
于 2012-04-23T13:47:03.437 に答える