【问题标题】:UIRefreshControl use in iOS6 but not in iOS5UIRefreshControl 在 iOS6 中使用但在 iOS5 中不使用
【发布时间】:2013-02-23 23:35:44
【问题描述】:

我想为 iOS6 用户添加一个 UIRefreshControl 为 iOS5 用户添加一个按钮。我只想将一个包交付到应用商店(显然),那么我该怎么做呢?

我能感觉到操作系统版本

float ver = [[[UIDevice currentDevice] systemVersion] floatValue];
if (ver >= 6.0) {
    // Programmatically add UIRefreshControl.
}

但是如果我想支持iOS5,编译器不会让我使用UIRefreshControl?

【问题讨论】:

    标签: iphone ios objective-c uikit


    【解决方案1】:

    如果编译器不让你使用它,那就让你愚弄他。您还可以(并且应该)从操作系统版本检测切换到功能检测。总而言之:

    if (NSClassFromString(@"UIRefreshControl") != Nil) {
        id control = [[NSClassFromString(@"UIRefreshControl") alloc] init];
    }
    

    【讨论】:

    • 我要补充一点,Apple 提供了SDK Compatibility Guide。这显示了使用运行时检查来查找框架、类和方法的正确方法。很少有代码需要检查systemVersion
    • @rmaddy 我懒得打开它,所以我只是问你这是否是好的“弄乱你的基础 SDK 并使用弱链接”的方法? (如果是这样,那么这也是一个很好的解决方案)。
    • @rmaddy 我在哪里查看systemVersion
    • 实际上,只做id control = [[NSClassFromString(@"UIRefreshControl") alloc] init]; 是安全的,因为在 nil 上调用方法返回 nil。我也很少遇到像[UIRefreshControl class] 这样的事情的问题,只要 SDK 具有正确的符号可见性,通常就可以正常工作。
    • @tc。这不是实际的生产代码,你知道 :) 当然它会返回nil 或非nil,我只是想表明可以基于类的存在进行分支。是的,弱链接更不痛苦(如果有人认为带有 3 行代码的 if 是痛苦的)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    相关资源
    最近更新 更多