如何从导航栈中弹出上一个视图控制器?

3
我将使用导航控制器从一个视图推到另一个视图,但我没有弹出任何我推送的视图。因此,当我加载一个视图时,我想要从堆栈中弹出前一个视图。
推送视图的代码:
var identities = [String]()

identities = ["A", "B", "C", "D", "E"]

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

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

}

弹出视图的测试代码(不过这不是我想要的):

self.navigationController?.viewControllers.remove(at: 0)

非常感谢您的帮助。

已解决:

@DonMag帮助我了解了代码行的正确使用和放置位置。


https://developer.apple.com/reference/uikit/uinavigationcontroller/1621886-popviewcontroller 的中文翻译为: 返回已弹出的视图控制器 - The Dreams Wind
2个回答

9

实际上,这很简单:

self.navigationController?.popViewController(animated: true)

问题是我把原始代码放在viewdidload中,当我把你的代码放在它的位置时,它立即将我弹出视图。基本上,我是为了在下一个视图加载时掩盖我的踪迹。 - Slavic the Slavic
好的 - 你想要在什么时候返回到你的原始视图控制器?在按钮点击之后吗?还是在一段时间之后? - DonMag
是的,一个按钮点击。 - Slavic the Slavic
好的 - 那么这行代码就放在你的按钮点击代码中 - 你可能已经将其设置为@IBAction - DonMag
我正在使用一个表格视图,不确定如何将您的代码放入其中。 - Slavic the Slavic
显示剩余2条评论

1
这是对我有效的方法:

var navigationArray = self.navigationController?.viewControllers

navigationArray.remove(at: 0)

self.navigationController?.viewControllers = navigationArray

我已经实现了这个功能,离成功只差一点点。唯一的问题是每次从初始视图控制器推出时会有一小段内存增加。不能把这段代码放在那里,因为它会自动删除自己。其他所有的视图都没有问题。有什么建议吗? - Slavic the Slavic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接