2016-06-28 20 views
1

self.window.rootViewController.presentedViewControllerself.window.rootViewController.presentedViewController Rückkehr null

immer nil Rückkehr obwohl es Viewcontroller zur Verfügung steht. Nicht sicher, was ich falsch mache.

Im Folgenden finden Sie den vollen Code-

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 
{ 

NSLog(@"this is loaded"); 
if ([self.window.rootViewController.presentedViewController isKindOfClass:[SecondViewController class]]) 
{ 
    SecondViewController *secondController = (SecondViewController *) self.window.rootViewController.presentedViewController; 

    if (secondController.isPresented) 
    { 
     return UIInterfaceOrientationMaskLandscape; 
    } 
    else return UIInterfaceOrientationMaskPortrait; 
} 
else return UIInterfaceOrientationMaskPortrait; 
} 
+0

Wie präsentieren Sie View Controller? –

+0

Verwendung der TableView-Delegate-Methode, Wählte Zeile im Index, – iosDev

+0

detailViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self.navigationController pushViewController: detailViewController animiert: NO]; – iosDev

Antwort

1

self.window.rootViewController.presentedViewController. Ich denke, es gibt Ihnen UINavigationController Typ Klasse. Bitte überprüfen Sie das Protokoll oder debuggen Sie.

UINavigationController* navigationController = (UINavigationController*)self.window.rootViewController.presentedViewController; 

NSArray *arrayVC =navigationController.viewControllers; 
     for (UIViewController* viewController in arrayVC) { 

       //This if condition checks whether the viewController's class is SecondViewController 
       if ([viewController isKindOfClass:[SecondViewController class]]) 
       { 
        //Do something 
       } 

      } 
+0

Ja, ich bekomme UINavigationController – iosDev

+0

Was bekommen Sie in ArrayVC? Gib mir Bescheid. –

+0

Ich bekomme 4 viewcontrollers – iosDev

1
if([self.window.rootViewController.presentedViewController isKindOfClass:[UINavigationController class]]) { 
    UINavigationController* navigationController = (UINavigationController*)self.window.rootViewController.presentedViewController; 
    if([navigationController.visibleViewController isKindOfClass:[SecondViewController class]]) 
    { 
      SecondViewController *secondController = (SecondViewController *) self.window.rootViewController.presentedViewController; 

      if (secondController.isPresented){ 
        return UIInterfaceOrientationMaskLandscape; 
      } 
      else return UIInterfaceOrientationMaskPortrait; 
    } 
    else return UIInterfaceOrientationMaskPortrait; 
} 

Editiert:

[self.navigationController pushViewController:detailViewController animated:NO]; 

mit diesem ersetzen:

[self.navigationController presentViewController:detailViewController animated:NO completion:nil]; 
+0

Noch immer nil :( – iosDev

+0

Grundsätzlich ich ein bestimmtes Viewcontroller identifizieren möchten, und die für das jeweilige Viewcontroller unterstützt orientatin Landschaft sein. – iosDev

+0

@iosDev Überprüfen Sie bitte meine Antwort. –

0

diesem Code rumprobieren. Hier können Sie überprüfen, ob es präsentiert oder geschoben wird und auch Ihre spezifische Klasse überprüfen.

UIViewController *vcTmp = [[UIViewController alloc]init]; 

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

if([[appDelegate.window.rootViewController presentingViewController] presentedViewController]) 
{ 

    // Now your viewcontroller is presented 

    vcTmp = [[appDelegate.window.rootViewController presentingViewController] presentedViewController]; 

    if ([vcTmp isKindOfClass:[MasterViewController class]]){ 

      // Your class is identified here 

    } 

} 
else 
{ 

    // Now your viewcontroller is pushed 

    vcTmp = [[appDelegate.window.rootViewController presentingViewController] presentedViewController]; 

    NSArray *viewControllers = [appDelegate.window.rootViewController childViewControllers]; 

    vcTmp = (UIViewController*)viewControllers.lastObject; 

    if ([vcTmp isKindOfClass:[MasterViewController class]]){ 

      // Your class is identified here 

    } 

}