检查协议方法是否已定义

时间:2011-11-08 16:44:49

标签: ios objective-c-runtime uiscrollviewdelegate

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协议定义了此方法,我也不知道该怎么做
  3. 我更愿意以某种方式检查方法是否在协议中定义,而不是检查iOS版本。请注意,执行respondsToSelector:检查是不够的,因为我的类实现协议将始终定义它。

1 个答案:

答案 0 :(得分:4)

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

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