在我的一个表视图中添加了一个UIRefreshControl,并且在使用NSClassFromString()配置和添加UIRefreshControl之前,在tableview控制器上使用了respondsToSelector来查看它是否具有refreshControl属性。完美运行,我可以继续支持iOS 5.1(只是没有他们获得新的控件)。
然而......我想重写beginRefreshing和endRefreshing方法来动态改变控件的色调颜色。我认为子类化UIRefreshControl将是最简单的方法。但是我该怎么做呢,仍然支持iOS 5.1?
答案 0 :(得分:1)
实际上,假设您的基本SDK至少是iOS 6.0,只要您的部署目标是iOS 3.1或更高版本,您就可以继承UIRefreshControl
。那是因为在iOS 3.1中,为弱链接类添加了支持。
对于弱链接类,如果向正在运行的操作系统中不存在的类发送消息,则它与消息传递nil相同。因此,您可以这样做,而不是使用NSClassFromString()
:
if ([UIRefreshControl class]) {
// Use it
}
else {
// Do something else
}
即使在传递自己的弱链接类的子类时,它仍然有效。正如Apple的"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的设备。您的问题已解决。