我的应用程序有一个UISplitViewController,其中有一个UITableViewController作为主视图,可以连接到Detail视图控制器。在正常操作下,这可以正常工作。但是我遇到了从纵向折叠视图转换为横向折叠视图的设备的麻烦(例如iPhone X)。如果用户以纵向模式查看主表视图,则尚未为“明细”选择任何对象。如果设备在这种状态下旋转,则将强制显示“细节VC”,而无需显示任何对象。
由于未调用segue,如何捕获旋转事件,或者如何确保我的主VC将对象传递给Detail VC进行显示,或者如果没有可用对象,则将其设置为nil?
我的提取结果控制器位于主VC中。一旦(空)Detail VC开始显示,就会调用ViewDidLoad和ViewWillAppear,并且我可以检测到没有对象可以显示。这不是找回获取的结果控制器以获取默认对象的好地方(就像IndexPath(row:0,section:0)一样)。表格中还可能没有数据,因此也许最简单的解决方案是将Detail VC设置为nil。但是,一旦我在ViewDidLoad中检测到问题,就太迟了,不让Detail VC不存在。
我尝试在主VC中将UISplitViewControllerDelegate设置为self,以便可以使用此协议功能来检测旋转:
func splitViewController(_ svc: UISplitViewController, willChangeTo displayMode: UISplitViewController.DisplayMode) {
print("Split view delegate notified! Will change to \(displayMode)")
}
但是旋转设备时不会调用此函数。我还尝试将此功能放入AppDelegate中,该功能已经是UISplitViewControllerDelegate。在那种情况下,我可以看到它在应用程序启动时被调用,但在用户旋转设备时未被调用。