子类化UIRefreshControl但仍然支持iOS 5.1?

时间:2012-10-23 09:23:39

标签: ios subclass uirefreshcontrol

在我的一个表视图中添加了一个UIRefreshControl,并且在使用NSClassFromString()配置和添加UIRefreshControl之前,在tableview控制器上使用了respondsToSelector来查看它是否具有refreshControl属性。完美运行,我可以继续支持iOS 5.1(只是没有他们获得新的控件)。

然而......我想重写beginRefreshing和endRefreshing方法来动态改变控件的色调颜色。我认为子类化UIRefreshControl将是最简单的方法。但是我该怎么做呢,仍然支持iOS 5.1?

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的设备。您的问题已解决。