横向视图控制器应用程序代理

时间:2015-06-19 11:58:12

标签: swift uiviewcontroller orientation appdelegate

我试图只在景观模式下放置一个视图控制器,在纵向模式下放置其他视图控制器。

首先,我试图使每个View Controller的旋转无效,除了我想要的那个(使用shouldAutoRotate false,只有Portrait,...),但是我使用的是导航控制器,它与Nav重叠有状态栏的栏,我无法解决。所以在那之后,我试图清理我所做的一切,并从AppDelegate启用或禁用Orientation。

所以这是我找到并试过的代码:

    func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> Int {

        if self.window?.rootViewController?.presentedViewController is SecondViewController {

            let secondController = self.window!.rootViewController!.presentedViewController as! SecondViewController

            if secondController.isPresented {
                return Int(UIInterfaceOrientationMask.All.rawValue);
            } else {
                return Int(UIInterfaceOrientationMask.Portrait.rawValue);
            }
        } else {
            return Int(UIInterfaceOrientationMask.Portrait.rawValue);
        }

    }

但是这个代码永远不会出现在第一个if中(即使View控制器是SecondViewController)。

那么我是否知道如何检查我是否在指定方向的特定VC?

提前致谢!

1 个答案:

答案 0 :(得分:1)

检查这个获取当前viewController的递归方法

func getCurrentViewController(viewController:UIViewController?)-> UIViewController?{

    if let tabBarController = viewController as? UITabBarController{

        return getCurrentViewController(tabBarController.selectedViewController)
    }

    if let navigationController = viewController as? UINavigationController{
        return getCurrentViewController(navigationController.visibleViewController)
    }

    if let viewController = viewController?.presentedViewController {

        return getCurrentViewController(viewController)

    }else{

        return viewController
    }
}

并在支持的定位方法上使用它,如下所示

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> Int {

    if let currentVC = getCurrentViewController(self.window?.rootViewController) as? SecondViewController{

            return Int(UIInterfaceOrientationMask.All.rawValue)

    }
    return Int(UIInterfaceOrientationMask.Portrait.rawValue)
}