DrawerController的iOS状态恢复问题

前端之家收集整理的这篇文章主要介绍了DrawerController的iOS状态恢复问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个使用 Xcode 8.3.3在 Swift 3.1中编写的应用程序.

我目前正在尝试实施国家保护/恢复.

为此,我在AppDelegate.swift中实现了shouldSaveApplicationState和willFinishLaunchingWithOptions方法,并设置为返回true:

// AppDelegate.swift
// STATE RESTORATION CALLBACKS

func application(_ application: UIApplication,shouldSaveApplicationState coder: NSCoder) -> Bool {
    debug_print(this: "shouldSaveApplicationState")
    return true
}
func application(_ application: UIApplication,shouldRestoreApplicationState coder: NSCoder) -> Bool {
    debug_print(this: "shouldRestoreApplicationState")
    restoringState = true
    return true
}

func application(application: UIApplication,willFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
    debug_print(this: "willFinishLaunchingWithOptions")
    return true
}

我还为所有相关的viewcontrollers和navigationcontrollers提供了恢复ID.

我正在使用第三方库来处理侧抽屉导航容器(https://github.com/sascha/DrawerController).初始viewcontroller是在didFinishLaunchingWithOptions方法中以编程方式设置的,见下文.

// AppDelegate.swift
var centerContainer: DrawerController?

func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main",bundle: nil)
    let centerViewController =   mainStoryboard.instantiateViewController(withIdentifier: "RootViewControllerNav") as! UINavigationController 
    let leftViewController = mainStoryboard.instantiateViewController(withIdentifier: "SideDrawerViewController") as! UITableViewController

    centerContainer = DrawerController(centerViewController: centerViewController,leftDrawerViewController: leftViewController)

    centerContainer?.restorationIdentifier = "DrawerControllerView"
    window = UIWindow(frame: UIScreen.main.bounds)
    window?.restorationIdentifier = "MainWindow"
    window?.rootViewController = centerContainer
    window?.makeKeyAndVisible()

    return true
}

当应用程序打开并尝试恢复状态时,它会暂时显示正确的viewcontroller(应用程序关闭前的最后一个控制器),然后一旦应用程序变为活动状态,它将恢复为初始viewcontroller.

例如,发生以下情况:

>打开应用程序通过侧面菜单导航到“设置”视图
>导航到主屏幕
>停止运行xcode并再次启动它
>应用程序将打开显示设置视图,然后恢复为主视图

任何人都可以告诉我是什么导致了这个,或者我哪里出错了?如果您需要更多代码示例,请与我们联系.

解决方法

func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main",bundle: nil)
        let leftSideDrawerViewController = mainStoryboard.instantiateViewController(withIdentifier: "SideDrawerViewController") as! UITableViewController
        let centerViewController = mainStoryboard.instantiateViewController(withIdentifier: "RootViewControllerNav") as! UINavigationController
        let navigationController = UINavigationController(rootViewController: centerViewController)
        navigationController.restorationIdentifier = "navigationControllerKey"
        let leftSideNavController = UINavigationController(rootViewController: leftSideDrawerViewController)
        leftSideNavController.restorationIdentifier = "LeftNavigationController"
        self.drawerController = DrawerController(centerViewController: navigationController,leftDrawerViewController: leftSideNavController,rightDrawerViewController: nil)
        self.drawerController.openDrawerGestureModeMask = .all
        self.drawerController.closeDrawerGestureModeMask = .all
        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window?.rootViewController = self.drawerController
        return true
    }

猜你在找的iOS相关文章