首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确使用popToViewController?

如何正确使用popToViewController?
EN

Stack Overflow用户
提问于 2017-05-22 22:14:17
回答 1查看 1.9K关注 0票数 2

我要做的是,弹出所有以前的视图控制器从堆栈到‘菜单’控制器。我有一段代码可以做到这一点,但是当点击“菜单”时,应用程序就会崩溃。

崩溃的原因是:“试图弹出一个不存在的视图控制器。”

下面是我代码的一部分:

代码语言:javascript
复制
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    // 0 = menu
    if indexPath.row == 0 {
        let vcName = identities[indexPath.row]
        let viewController = storyboard?.instantiateViewController(withIdentifier: vcName)
        let _ = navigationController?.popToViewController(viewController!, animated: true)

    } else {

        let vcName = identities[indexPath.row]
        let viewController = storyboard?.instantiateViewController(withIdentifier: vcName)
        self.navigationController?.pushViewController(viewController!, animated: true)
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-22 22:20:48

您无法实例化要弹出的视图控制器的新实例;您需要弹出到导航堆栈中的实际实例。

如果菜单是导航堆栈的根,那么可以使用popToRootViewController。如果它在堆栈的其他地方,那么要么需要保存对它的引用,要么可以迭代导航控制器的viewControllers数组来找到它,然后弹出到它。

代码语言:javascript
复制
if let navController = self.navigationController {
    for controller in navController.viewControllers {
        if controller is MenuController { // Change to suit your menu view controller subclass
            navController.popToViewController(controller, animated:true)
            break
        }
    }
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44122917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档