7

の存在を確認するために、ここにこのコードがありViewControllerます。残念ながら、それは機能しません。問題は、別の VC が から飛び出した瞬間に実行されるということですNavigation Stack

- (void) leftViewDidHide{
    if ([((AppDelegate *)[UIApplication sharedApplication].delegate).frontViewController.navigationController.viewControllers objectAtIndex:1]) {
    SGServerListViewController *sample = [[[((AppDelegate *)[UIApplication sharedApplication].delegate).frontViewController.navigationController.viewControllers objectAtIndex:1]childViewControllers] objectAtIndex:0];
    [sample.serverTableView setUserInteractionEnabled:YES];
    }
}

ifステートメントのある行を指す例外ブレークポイントでアプリがクラッシュします。ここで何が間違っている可能性があるかについてのアイデアはありますか? これが存在するかどうか、存在する場合はコードを実行するかどうかを確認しようとしVCています。

4

6 に答える 6

7
NSArray *viewControlles = [self.navigationController.viewControllers];

for (int i = 0 ; i <viewControlles.count; i++){ 
  if ([YourVC isKindOfClass:[viewControlles objectAtIndex:i]]) {
          //Execute your code
      }
}
于 2013-01-17T12:32:22.723 に答える
5
 NSArray *controllerArray = [self.navigationController.viewControllers];
//will get all the controllers added to UINavigationController.

    for (id controller in controllerArray)
   { 
      // iterate through the array and check for your controller
      if ([controller isKindOfClass:[checkYourController class]]) 
          {
              //do your stuff here
          }
    }

クラスのアイデアcontainsObject:メソッドだけでも機能する可能性があります。NSArray

于 2013-01-18T09:31:02.390 に答える
2
- (void) leftViewDidHide{

if ([((AppDelegate *)[UIApplication sharedApplication].delegate).frontViewController.navigationController.viewControllers count] == 1) {

         SGServerListViewController *sample = [[[((AppDelegate *)[UIApplication sharedApplication].delegate).frontViewController.navigationController.viewControllers objectAtIndex:1]childViewControllers] objectAtIndex:0];
         [sample.serverTableView setUserInteractionEnabled:YES];

     }
 }
于 2013-01-17T12:24:07.663 に答える
1

次のコードを使用して、それを行うことができます (Navigation Stack に ViewController が存在するかどうかを確認します)。

if navigationController?.viewControllers.count > 1 {
    for root in (self.navigationController?.viewControllers)! {
        if root is ViewController {
           let i = root as? ViewController
            i?.table.removeFromSuperview()
        }
    }
}
self.navigationController?.popToRootViewControllerAnimated(true)
于 2016-07-14T06:22:46.547 に答える
0
NSArray *viewControlles = self.navigationController.viewControllers;

for (int i = 0 ; i <viewControlles.count; i++){
    if ([[viewControlles objectAtIndex:i] isKindOfClass:[RequiredViewController class]]) {

        //Enter your code

    }
}
于 2016-12-22T19:47:34.890 に答える