0

我正在使用 CosmicMind 的Material Framework。目前,我正在尝试ViewController替换SideNavigationController. 不幸的是,我无法弄清楚如何做到这一点。StackOverflow ( #1 )上也有类似的问题,不幸的是,这些解决方案对我不起作用。

按照我在AppDelegate.swift课堂上的代码:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let myViewController = storyboard.instantiateViewControllerWithIdentifier("MyViewController")

    let navigationController: NavigationController = AppNavigationController(rootViewController: myViewController)

    let sideNavigationController: SideNavigationController = SideNavigationController(rootViewController: navigationController, leftViewController: AppLeftViewController())

    // further code

    return true
}

使用此代码,一切正常。显示了 ViewController ( MyViewController )。
现在我试图用MySecondViewController替换MyViewController但这不起作用。按照我一直在使用的代码:

sideNavigationController?.transitionFromRootViewController(MySecondViewController())

结果是 Toolbar 消失了,我不能再关闭 SideNavigationController 了。所以我尝试了以下方法:

let navigationController: NavigationController = AppNavigationController(rootViewController: MySecondViewController())
sideNavigationController?.transitionFromRootViewController(navigationController)

使用此代码,工具栏再次可见,但 SideNavigationController 的问题仍然存在 -> 意味着:它无法关闭。

tl; dr
如何正确替换 NavigationController 的 rootViewController?

4

1 回答 1

1

NavigationController是 UINavigationController 的子类。因此,更改 rootViewController 就像 iOS 所做的那样。例如:

navigationController?.pushViewController(MySecondViewController(), animated: true)

SideNavigationController提供了转换其 rootViewController 的能力。这是不同的,因为 SideNavigationController 使用子 UIViewController 并在被询问时交换它们。例如:

sideNavigationController?.transitionFromRootViewController(MySecondViewController())

有时,人们sideNavigationController会提前使用 to。例如,您实例化一个新的 UIViewController,并将sideNavigationController代码放在videDidLoad方法中。这不起作用,因为新的 UIViewController 尚未添加到sideNavigationController视图层次结构中。要解决此问题,请使用该viewWillAppear方法。

最后一种需要考虑的情况是,当你想NavigationControllersideNavigationController. 为了做到这一点,让我们考虑sideNavigationController' 的 rootViewController 是NavigationController,你需要这样做:

(sideNavigationController?.rootViewController as? NavigationController)?.pushViewController(MySecondViewController(), animated: true)

这应该可以帮助你:)

于 2016-04-07T17:39:35.673 回答