1

ここで私のテーブルビューの1つにUIRefreshControlを追加し、NSClassFromString()を使用してUIRefreshControlを構成および追加する前に、tableviewコントローラーでrespondsToSelectorを使用してrefreshControlプロパティがあるかどうかを確認しました。完全に動作し、iOS 5.1 のサポートを継続できます (ただし、新しいコントロールを取得する必要はありません)。

しかし… beginRefreshing および endRefreshing メソッドをオーバーライドして、コントロールの色合いを動的に変更したいと考えています。そして、これを行う最も簡単な方法は、UIRefreshControl をサブクラス化することだと考えました。しかし、どうすれば iOS 5.1 をサポートしながら、それを行うことができるでしょうか?

4

1 に答える 1

1

実際、ベースSDKが少なくともiOS 6.0であると仮定するUIRefreshControlと、デプロイメントターゲットがiOS3.1以降である限りサブクラス化できます。これは、iOS 3.1で、弱くリンクされたクラスのサポートが追加されたためです。

弱くリンクされたクラスでは、実行中のOSに存在しないクラスにメッセージを送信する場合、それはメッセージング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を実行しているデバイスでも機能し、iOS6を実行しているデバイスでも機能します。問題は解決しました。

于 2012-11-08T04:50:30.863 に答える