1

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

但是……我想重写 beginRefreshing 和 endRefreshing 方法来动态改变控件的色调。我认为子类化 UIRefreshControl 将是最简单的方法。但是我将如何做到这一点并且仍然支持 iOS 5.1?

4

1 回答 1

1

实际上,假设您的基础 SDK 至少是 iOS 6.0,UIRefreshControl只要您的部署目标是 iOS 3.1 或更高版本,您就可以进行子类化。这是因为在 iOS 3.1 中,添加了对弱链接类的支持。

对于弱链接类,如果您向正在运行的操作系统中不存在的类发送消息,则它与消息传递 nil 相同。NSClassFromString()因此,您可以这样做,而不是使用:

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

即使在向您自己的弱链接类的子类发送消息时,这也有效。正如 Apple 的“SDK 兼容性指南”所说,

如果您对弱链接类进行子类化并且超类不可用,则子类也将显示为不可用。

所以你可以这样做:

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

这将适用于运行 iOS 5.1 的设备,就像它适用于运行 iOS 6 的设备一样。您的问题已解决。

于 2012-11-08T04:50:30.863 回答