【问题标题】:respondsToSelector fails for appearance proxyrespondsToSelector 外观代理失败
【发布时间】:2012-09-19 23:33:28
【问题描述】:

我正在尝试通过在 [UIBarButtonItem appearance] 上运行 respondsToSelector 来检测 iOS 6 特定的外观方法。但是,无论我指定什么选择器,它总是为我返回 NO

// Should show NOPE in iOS 5, YEP in iOS 6. Shows NOPE always
NSLog(@"%@", [[UIBarButtonItem appearance] respondsToSelector:@selector(setBackgroundImage:forState:style:barMetrics:)] ? @"YEP" : @"NOPE"); 

// Should show YEP in both iOS 5 and iOS 6. Shows NOPE always
NSLog(@"%@", [[UIBarButtonItem appearance] respondsToSelector:@selector(setBackgroundImage:forState:barMetrics:)] ? @"YEP" : @"NOPE"); 

实际上,在它们各自的 iOS 版本上使用这些方法都可以正常工作,但我似乎无法检测到哪一个对我可用。那么我该如何正确地做到这一点呢?

【问题讨论】:

    标签: objective-c xcode ios5 ios6 uiappearance


    【解决方案1】:

    不要检查外观代理。你永远不能依赖它,因为它是一个代理。相反,直接检查具有新方法的项目,在这种情况下,UIBarButtonItem

    BOOL hasNewMethod = [UIBarButtonItem instancesRespondToSelector:@selector(setBackgroundImage:forState:style:barMetrics:)];
    if( hasNewMethod )
      NSLog(@"Running iOS 6 with new method");
    else
      NSLog(@"Current OS doesn't support method...");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 2019-07-25
      相关资源
      最近更新 更多