2012-10-23 49 views
1

在這裏添加了一個UIRefreshControl到我的一個tableviews中,並且在使用NSClassFromString()配置和添加UIRefreshControl之前,在tableview控制器上使用了respondsToSelector來查看它是否具有refreshControl屬性。完美的工作,我可以繼續支持iOS 5.1(只是沒有他們獲得新的控制)。繼承UIRefreshControl但仍支持iOS 5.1?

但是...我想重寫beginRefreshing和endRefreshing方法來動態更改控件的色調顏色。我認爲UIRefreshControl的子類化將是最簡單的方法。但我怎麼做,仍然支持iOS 5.1?

回答

1

實際上,假設您的基礎SDK至少爲iOS 6.0,只要您的部署目標是iOS 3.1或更高版本,就可以子類UIRefreshControl。這是因爲在iOS 3.1中,爲弱鏈接類添加了支持。

對於弱鏈接類,如果向正在運行的操作系統中不存在的類發送消息,則它與消息傳遞nil相同。因此,而不是使用NSClassFromString(),你可以這樣做:

if ([UIRefreshControl class]) { 
    // Use it 
} 
else { 
    // Do something else 
} 

短信自己的弱連接類的子類時,這也可使用。正如蘋果公司的"SDK Compatibility Guide"所述,

如果您繼承弱鏈接的類並且超類不可用,那麼該子類也不可用。

所以你可以這樣做:

if ([MyRefreshControl class]) { 
    MyRefreshControl *control = [[MyRefreshControl alloc] init]; 
    // Do something with the control 
} 
else { 
    // Do something else 
} 

這將在運行iOS 5.1的設備很好的工作,因爲它適用於運行iOS 6,你的問題就解決了設備。