我有一个使用自定义演示控制器的卡片的模式演示,效果很好。我现在需要为另一个弹出窗口使用演示控制器,但困难在于它需要有所不同。我在试图克服这个问题时遇到了多个问题。
第一个问题:我的视图控制器显然不能有两个相同的扩展,这意味着据我所知我只能引用一个 UIPresentationController 文件。但是,理想情况下,我需要第二个 UIPresentationController 来管理第二个 Presentation。
第二个问题:由于我不能有第二个扩展,我尝试在扩展中使用 if 语句,如下所示:
extension ThirdViewControllerPassenger: UIViewControllerTransitioningDelegate {
func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
if something == something {
PresentationController(presentedViewController: presented, presenting: presenting)
} else {
PresentationController2(presentedViewController: presented, presenting: presenting)
}
}
}
那行不通,我猜是因为我无法更改扩展名的语法。错误是缺少回报。
第三个问题:我的最后一个想法是使用用户默认键来保存状态,然后检查我的 UIPresentationController 中每个函数的状态。例如,我会设置defaults.set("showTripOverview", forKey: "presentationStyle")
然后将我的 UIPResentationController 函数拆分为两部分,如果presentationStyle 为“ShowTripOverview”,则另一部分为“ShowTripOverview”,否则为另一部分。这个想法运行良好,代码编译并且它似乎工作。但是没过多久,我注意到我在主 ViewController 中设置的所有默认值(必须在调用 UIPresentationController 之前运行!!)都设置为 nil。所以我所有的 if 调用都直接转到 else,这不是我想要的......
谁能向我解释如何解决这三个问题之一?我只需要能够以某种方式使用第二个 UIPresentationController 来调整动画等。对于第二个演示文稿。我不认为这是一件奇怪的事情,因为许多应用程序使用不同的方式来呈现事物。虽然在网上找不到任何东西......