我想知道是否有可能/如何编写一个类,以便它可以在 Objective-C 的不同 iOS 版本上运行。例如 VisualEffectView 仅适用于 iOS8 及更高版本。如果 iOS >= 8 是否可以声明 VisualEffectView ,如果不是则可以声明 UIView ?如果是这样,这可以在头文件中完成吗?
我想创建一个警告框,以便在保存完成或发生错误时出现在视图控制器的顶部。根据 iOS 版本,如果使用精美的模糊视图或仅使用平面 UIView 会很好。
我想知道是否有可能/如何编写一个类,以便它可以在 Objective-C 的不同 iOS 版本上运行。例如 VisualEffectView 仅适用于 iOS8 及更高版本。如果 iOS >= 8 是否可以声明 VisualEffectView ,如果不是则可以声明 UIView ?如果是这样,这可以在头文件中完成吗?
我想创建一个警告框,以便在保存完成或发生错误时出现在视图控制器的顶部。根据 iOS 版本,如果使用精美的模糊视图或仅使用平面 UIView 会很好。
在if
声明中,使用NSClassFromString
. 您会立即发现 UIVisualEffectView 在返回时不存在nil
,因此您可以在它存在时采用一个分支,如果它不存在则采用另一个分支:
if (!NSClassFromString(@"UIVisualEffectView")) {
// ... use UIView ...
} else {
// ... use UIViewVisualEffectView ... {
}
从 iOS 5 开始,您可以使用以下语法。
if ([UIVisualEffectView class]) {
// Create and use a UIVisualEffectView
}
这有时会咬你,NSMapTable
在 iOS 6 之前的 iOS 版本中可用,但在 iOS 6 中仅“正式”可用。当尝试在 iOS 5 中使用它时,会出现一些零星的未记录行为。
正如许多人所建议的那样,您可以使用该NSClassFromString
功能在运行时找出操作系统版本是否具有该类。如果没有(即 iOS 7 设备)并且您仍然想要实时模糊,我会推荐LiveFrost。