jac*_*ash 35 uiviewcontroller ios ios8
我正在编写一个仅限iOS 8的应用程序,我正在使用新的自适应演示文稿,结合使用"显示"和"显示详细信息"segue showViewController:sender:和showDetailViewController:sender:方法.
我的问题是,打电话后回去的程序方法是什么showViewController:sender:?视图控制器的显示方式取决于其父上下文.例如,在UINavigationController showViewController:sender:将新控制器推入导航堆栈时,但如果视图控制器图形中没有UIKit容器,则showViewController:sender:最终会进行演示.
考虑到我可以编写自己的任意容器控制器,检查似乎不可行
if (self.navigationController) {
[self.navigationController popViewControllerAnimated:YES];
}
else if (self.presentingViewController){
...
else if ([self.parentViewController isKindOfClass:[CrazyCustomContainer class]]){
[self.parentViewController someWackyUnwindMethod];
}
...
Run Code Online (Sandbox Code Playgroud)
等等...那么有一种反向显示的通用方法吗?如果不是我看到的唯一解决方案是使用展开segue的一切.没有太多的麻烦,但我很好奇.
bzz*_*bzz 27
对于如何一章showViewController:sender:和showDetailViewController:sender:工作程序的iOS 8:下潜深为视图,视图控制器和框架.
调用这些方法时,它们会targetViewControllerForAction:sender:自行调用并在返回的对象上调用此方法.然后,目标对象可以以适当的方式显示视图控制器.例如,导航控制器将视图控制器推送到其导航堆栈上.
因此,您可以创建一个泛型dismissVC:方法并在不同的UIViewController子类中覆盖它.
extension UIViewController {
func dismissVC(sender:AnyObject?) {
if let presentingVC = targetViewControllerForAction("dismissVC", withSender: sender) as? UIViewController {
presentingVC.dismissVC(self)
}
}
}
extension UINavigationController {
override func dismissVC(sender: AnyObject?) {
popViewControllerAnimated(true)
}
}
extension CrazyCustomContainer {
override func dismissVC(sender: AnyObject?) {
someWackyUnwindMethod()
}
}
Run Code Online (Sandbox Code Playgroud)
这样,当您调用dismissVC:method时,if将始终根据上下文正确地关闭视图控制器.
| 归档时间: |
|
| 查看次数: |
4913 次 |
| 最近记录: |