我无法从另一个视图控制器中呈现视图控制器。我能够实现这一目标的唯一方法是使用以下代码:
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")
}
即使上面的代码工作,我很好奇为什么下面的代码不起作用。我尝试的一切,我得到一个错误说我需要用非零布局参数初始化UICollectionView
。
self.present(partyPage, animated: true, completion: nil)
我几乎肯定我有正确的项目使用self.present()
,但我无法让它在这个vc上工作。
PS:我也很好奇什么时候改变rootViewController
(比如第一行代码)以及何时只能模态地呈现viewcontrollers是个好主意。我的应用程序将处理存储少量数据,因此长期传输数据的最佳方式是什么。
非常感谢所有帮助。如果需要,我可以提供更多代码。我对swift和编程很新,所以请原谅我,如果有些逻辑存在缺陷的话。谢谢!
除非绝对必须,否则不应调用根窗口来显示视图控制器。基本上认为您在浏览器窗口中将控制器视为选项卡。像这样回到窗口就像清除所有标签(sorta)。
至于为什么self.present()
没有工作,可能有几个原因。
如果您使用的是故事板,则需要以不同方式引用您的视图:P
也可以再次尝试使用self.present()
,如果它正在读取错误或将其与您的问题一起发布
completion: nil
是不必要的。
由于我不确切知道你的情况,我会给你几个选择。我将第一个视图称为VC1,第二个视图称为视图VC2
let loginView = UINavigationController(rootViewController: LoginViewController())
loginView.modalTransitionStyle = .flipHorizontal
self.present(loginView, animated: true)