2011-11-08 48 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;' –