我想知道是否有可能/如何编写一个类,以便它可以在Objective-C中的不同iOS版本上运行。例如,VisualEffectView仅在iOS8及之后可用。如果iOS> = 8则可以声明VisualEffectView,如果不是,可以声明UIView吗?如果是这样,可以在头文件中完成吗?
我想在保存完成或发生错误时创建一个显示在视图控制器顶部的警告框。根据iOS版本,如果使用花哨的模糊视图或仅仅是平面的UIView,那将是很好的。
答案 0 :(得分:1)
在if
语句中,使用NSClassFromString
。您会立即发现UIVisualEffectView在返回nil
时不存在,因此如果存在,则可以使用一个分支,如果不存在,则可以使用另一个分支:
if (!NSClassFromString(@"UIVisualEffectView")) {
// ... use UIView ...
} else {
// ... use UIViewVisualEffectView ... {
}
答案 1 :(得分:1)
从iOS 5开始,您可以使用以下语法。
if ([UIVisualEffectView class]) {
// Create and use a UIVisualEffectView
}
这偶尔会让你感到困惑,{iOS版本之前的iOS版本中提供NSMapTable
,但iOS 6中只能“正式”使用。当尝试在iOS 5中使用它时,会出现一些零星的无证件行为。
答案 2 :(得分:0)
正如许多人所建议的,如果操作系统版本有类,您可以使用NSClassFromString
函数在运行时查找。如果没有(即iOS 7设备)并且您仍然想要实时模糊,我建议LiveFrost。