ios - showViewController :sender: 的编程对面是什么

标签 ios uiviewcontroller ios8

我正在编写一个仅限 iOS 8 的应用程序,我正在使用新的自适应演示,结合使用“Show”和“Show Detail”segue 以及 showViewController:sender:showDetailViewController:sender: 方法。

我的问题是在调用 showViewController:sender: 后返回的编程方式是什么? View Controller 的显示方式取决于其父上下文。例如。在 UINavigationController showViewController:sender: 中将新 Controller 推送到导航堆栈,但如果 View Controller 图中没有 UIKit 容器,则 showViewController:sender: 最终改为进行演示。

考虑到我可以编写自己的任意容器 Controller ,检查似乎不可行

if (self.navigationController) {
    [self.navigationController popViewControllerAnimated:YES];
}
else if (self.presentingViewController){
...
else if ([self.parentViewController isKindOfClass:[CrazyCustomContainer class]]){
    [self.parentViewController someWackyUnwindMethod];
}
...

等等...那么是否有一种通用的方法来反转显示?如果不是,我看到的唯一解决方案是对所有内容都使用 unwind segues。不是太麻烦,但我很好奇。

最佳答案

有一章是关于showViewController:sender:showDetailViewController:sender: 如何在Programming iOS 8: Dive Deep into Views, View Controllers, and Frameworks 中工作的。 .

调用这些方法时,它们会调用自身的 targetViewControllerForAction:sender: 并在返回的对象上调用此方法。然后目标对象可以以适当的方式显示 View Controller 。例如,导航 Controller 将 View Controller 推送到其导航堆栈。

因此您可以创建一个通用的 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()
    }
}

这样,当您调用 dismissVC: 方法时,将始终根据上下文正确关闭 View Controller 。

关于ios - showViewController :sender: 的编程对面是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25742944/

相关文章:

ios4 - iPhone 应用内短信在显示短信模态视图时会更改状态栏的颜色

ios8 - 将 UIDatePicker 作为 inputView 添加到 iOS 8 中的 textField

ios - 之间的技术区别是什么? &!用快速的语言?

ios - iphone AVAudioRecorder,在线程中录制音频

iphone - 如何捕获同时包含 cocs2d 和 UIKit 的 View 的屏幕截图

ios - fatal error : unexpectedly found nil while unwrapping an Optional value (lldb)

ios - 如何返回当前 View Controller ?

ios8 - AVPlayerItem videoComposition 卡住IOS8

ios - iOS 委托(delegate)的目的是什么?

ios - 从 iOS 的 Compression_encode_buffer 解码 LZ4 输出