我在呈现另一个视图控制器时遇到问题。我能够实现这一目标的唯一方法是使用以下代码行:
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 和编程很陌生,所以如果某些逻辑有缺陷,请原谅我。谢谢!
除非绝对必要,否则不应调用根窗口来显示视图控制器。实质上,您可以将控制器视为浏览器窗口中的选项卡。像这样返回窗口就像清除所有选项卡(sorta(。
至于为什么self.present()
不起作用,可能有几个原因。
如果使用情节提要,则需要以不同的方式引用视图:P
也再次尝试使用self.present()
,如果它抛出错误阅读它或
completion: nil
是不必要的。
由于我不知道你的具体情况,所以我给你几个选择。我将第一个视图称为 VC1,将第二个视图称为视图 VC2
- 将 VC1 包装在导航控制器中,然后尝试使用 .push((
- 将VC2包装在导航控制器中,如下所示:(我在自己的项目中使用此代码,以便我可以验证它是否有效(
let loginView = UINavigationController(rootViewController: LoginViewController())
loginView.modalTransitionStyle = .flipHorizontal
self.present(loginView, animated: true)
- 指定我上面所说的模态过渡