打开ViewController(tabBarController中的navigationController)并运行函数

时间:2016-03-06 20:50:50

标签: ios swift uinavigationcontroller uitabbarcontroller uiapplicationdelegate

我想允许用户通过电子邮件在我的应用中打开图片。我在app delegate中设置了如下函数,以导航到我的settingsTableViewController。 settingsTableViewController是一个navigationController,它是一个tabBarViewController。

func application(app: UIApplication, openURL url: NSURL,
    options: [String : AnyObject]) -> Bool {


    self.window!.visibleViewController
    goToSecond()


    return true
}

func goToSecond() {
        let tabBarController: UITabBarController = (self.window?.rootViewController as? UITabBarController)!
        tabBarController.selectedIndex = 3

}

我用于完成上述工作的扩展是:

public extension UIWindow {
public var visibleViewController: UIViewController? {
    return UIWindow.getVisibleViewControllerFrom(self.rootViewController)
}

public static func getVisibleViewControllerFrom(vc: UIViewController?) -> UIViewController? {
    if let nc = vc as? UINavigationController {
        return UIWindow.getVisibleViewControllerFrom(nc.visibleViewController)
    } else if let tc = vc as? UITabBarController {
        return UIWindow.getVisibleViewControllerFrom(tc.selectedViewController)
    } else {
        if let pvc = vc?.presentedViewController {
            return UIWindow.getVisibleViewControllerFrom(pvc)
        } else {
            return vc
        }
    }
}
}

上述工作直到我添加我的代码以将url传递给settingsTableViewController,如下所示:

let vc = self.window?.rootViewController as! SettingsTableViewController
    vc.displayImage(url)

我收到以下错误:

Could not cast value of type '.TabBarController' (0x100161c00) to '.SettingsTableViewController'

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您的错误确切地告诉您问题所在。 RVC实际上是YOUR_GRAPHICS_ITEM.setZValue(std::numeric_limits<qreal>::max()); ,而不是您的TabBarController。这意味着您需要访问SettingsTableViewController的{​​{1}}数组,直至到达TabBarController