2012-10-23 50 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,你的问题就解决了设备。