2011-11-08 52 views
2

UIScrollViewDelegate有一个新的真棒方法:检查协议方法被定义

// called on finger up if the user dragged. velocity is in points/second. targetContentOffset may be changed to adjust where the scroll view comes to rest. not called when pagingEnabled is YES 
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView 
        withVelocity:(CGPoint)velocity 
       targetContentOffset:(inout CGPoint *)targetContentOffset __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0) 

然而,这是只在iOS 5中。对于没有这种方法的iOS,我想使用分页作为替代。所以,我有两种选择:

  1. 检查iOS版本,我不知道该怎么办,或
  2. 检查是否这种方法为UIScrollViewDelegate协议定义,我也不知道该怎么办

我宁愿以某种方式检查方法是否在协议中定义,而不是检查iOS版本。请注意,执行respondsToSelector:检查是不够的,因为我的类实现协议将始终定义它。

+0

+1关于协议成员可用性的有趣问题。 – Till

回答

4
BOOL isAtLeastIOS5 = [[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0; 

请参阅How to test a protocol for a method?来测试给定方法的协议。

+0

Nitpicking ...将BOOL重命名为isAtLeastIOS5;) – Till

+0

+1这看起来很简单,可能是我使用的。我仍然想知道如何检查协议是否定义了方法。我想知道是否有类似'instancesRespondsToSelector:'的工作。仍然试图找出自己...我会接受这个答案,如果我没有看到更好的。 – Sam

+0

'[[[UIDevice currentDevice] systemVersion] floatValue]> 4.3;'适用于iOS 4.3.3,所以这应该是'[[[UIDevice currentDevice] systemVersion] floatValue]> = 5.0;' –