通过键盘扩展在UINavigationController内部显示子视图

时间:2018-08-07 13:22:55

标签: swift uinavigationcontroller

我有一个键盘扩展名,希望用户能够点击“设置”,并转到实际应用程序内的设置页面。当我开始工作时,我感到非常兴奋,但我意识到该页面不再位于导航控制器中!

这是我的代码。如何在“ TransparentNavigationController”中增加它以显示特定的子屏幕?

    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {

    let urlPath : String = url.path as String!
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)


    if(urlPath == "/inner"){

        let innerPage: myStampsVC = mainStoryboard.instantiateViewController(withIdentifier: "myStampsVC") as! myStampsVC
        self.window?.rootViewController = innerPage
    }
    self.window?.makeKeyAndVisible()
    return true
}

我尝试了

的不同混合
let navigationController = window?.rootViewController as! UINavigationController
let innerPage = navigationController.viewControllers[4] as! myStampsVC

但我缺少一些东西。感谢您在正确的方向上进行轻按。

1 个答案:

答案 0 :(得分:0)

这是答案:

    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {

    let urlPath = url.path

    if(urlPath == "/inner"){
        func showMyStamps(in navigationController: UINavigationController) {
            navigationController.popToRootViewController(animated: false)
            _ = navigationController.topViewController?.view
            let innerViewController = myStampsVC() as UIViewController
            navigationController.pushViewController(innerViewController, animated: false)
        }

        switch window!.rootViewController {
        case let demo as DemoScreen:
            if let navC = demo.presentedViewController as? UINavigationController {
                showMyStamps(in: navC)
            } else {
                let storyBoard = UIStoryboard(name: "Main", bundle: nil)
                let navC = storyBoard.instantiateViewController(withIdentifier: "TransparentNavController") as! UINavigationController
                demo.present(navC, animated: false)
                showMyStamps(in: navC)
            }

        case let navC as UINavigationController:
            showMyStamps(in: navC)
        default: assertionFailure()
        }

    }
    return true
}