我在介绍另一个视图控制器时遇到了麻烦。我能够实现这一目标的唯一方法是使用以下代码行:
UIApplication.shared.keyWindow?.rootViewController?.present(partyMemberPage, animated: false, completion: nil)
这是整个功能:
func partyMemberPage() {
let layout = UICollectionViewFlowLayout()
let partyMemberPage = PartyMemberPage(collectionViewLayout: layout)
UIApplication.shared.keyWindow?.rootViewController?.present(partyMemberPage, animated: false, completion: nil)
print("from SplitButton")
}
即使上面的代码有效,我很好奇为什么下面的代码不起作用。我尝试的所有操作均出现错误,提示我需要使用非nil布局参数初始化UICollectionView
。
self.present(partyPage, animated: true, completion: nil)
我几乎可以肯定我有使用self.present()
的正确项目,但无法在此vc上使用它。
PS:我也很好奇何时更改rootViewController
(像代码的第一行一样)是什么好主意,以及何时以模态形式显示视图控制器是可以接受的?我的应用程序将处理存储少量数据的问题,那么长期传输该数据的最佳方法是什么。
非常感谢所有帮助。如果需要,我可以提供更多代码。我一般都不熟悉Swift和编程,因此如果某些逻辑存在缺陷,请原谅我。谢谢!
答案 0 :(得分:0)
除非绝对必要,否则不应调用根窗口来提供视图控制器。从本质上讲,您将控制器视为浏览器窗口中的选项卡。像回到窗口一样,清除所有选项卡(sorta)。
关于self.present()
为何不工作的原因可能有几个。
如果使用情节提要,则需要以不同的方式引用视图:P
如果它抛出错误,请重新尝试使用self.present()
或将其与您的问题一起发布
completion: nil
是不必要的。
由于我不确定您的实际情况,因此我将为您提供几种选择。我将第一个视图称为VC1,将第二个视图称为VC2
let loginView = UINavigationController(rootViewController: LoginViewController())
loginView.modalTransitionStyle = .flipHorizontal
self.present(loginView, animated: true)