如何将 IBOutlet 标记为可用于特定 iOS 版本

Posted

技术标签:

【中文标题】如何将 IBOutlet 标记为可用于特定 iOS 版本【英文标题】:How do I mark an IBOutlet as available for a specific iOS version 【发布时间】:2018-05-21 10:01:22 【问题描述】:

我正在使用仅适用于 ios 11 的 PDFKit 原生框架,并且我的项目针对的是较旧的 iOS 版本。 Xcode 让我将整个UIViewController 类标记为@available(iOS 11.0, *)

我想使用不同的UIView 处理在相同UIViewController 上的旧iOS 版本上查看PDF,这将使用UIWebView 或第3 方库。我怎样才能做到这一点?

【问题讨论】:

如果您有两种完全不同的controlling 数据方式,每个都有自己的view,也许两个独立的viewcontrollers 是更好的解决方案?创建一个基类(如果您使用 Swift,则创建一个协议 + 扩展)并将您的共享功能放在那里。然后制作两个子视图控制器来呈现数据。 这是可能的,但我想问我是否可以使用相同的UIViewController 而不必复制我的 UI。 【参考方案1】:

您可以在同一视图控制器上为特定于版本的执行设置此条件。

if #available(iOS 11.0, *) 

    let pdfView = PDFView(frame: UIScreen.main.bounds)
    let url = Bundle.main.url(forResource: "How", withExtension: "pdf")
    pdfView.document = PDFDocument(url: url!)
    self.view.addSubview(pdfView)

 else 
        // Fallback on earlier versions

【讨论】:

我不能为 IBOutlets 这样做。 PDFKit 所需的 PDFView 仅适用于 iOS 11。 您不能为 IBOutlets 设置此条件。请检查已编辑的答案。

以上是关于如何将 IBOutlet 标记为可用于特定 iOS 版本的主要内容,如果未能解决你的问题,请参考以下文章

如何将对象标记为可序列化

IOS辅助功能选择的标记不移动

如何将 IBOutlet 值从视图传递到 VIPER iOs 中的交互器?

flask-marshmallow:仅当方法为 PUT 时如何将所有字段标记为可选

如何在 iOS 中管理自定义单元格标签值?

持久化未标记为可序列化的对象