4

のアクティビティ インジケータ (おそらくUIActivityIndicatorView) の色を設定する方法はありUIRefreshControlますか?

「ゴム」とインジケーターの色を設定できました。

[_refreshControl setTintColor:[UIColor colorWithRed:0.0f/255.0f green:55.0f/255.0f blue:152.0f/255.0f alpha:1.0]];

しかし、「ゴム」を青く、活動インジケータを白にしたいのですが、これは可能ですか?

4

3 に答える 3

3

これは公式にはサポートされていませんが、将来の iOS の変更によってコードが壊れるリスクを冒したい場合は、これを試すことができます。

ayoy の答えを基に、ActivityIndi​​cator の色を設定する UIRefreshControl のサブクラスを作成しましたbeginRefresing。これは、ユーザーがアニメーションを開始する代わりにコードで呼び出すことができるため、これを配置するのに適した場所です。

@implementation WhiteRefreshControl : UIRefreshControl

- (void)beginRefreshing
{
    [super beginRefreshing];

    NSArray *subviews = [[[self subviews] lastObject] subviews];
    //Range check on subviews
    if (subviews.count > 1) 
    {
        id spinner = [subviews objectAtIndex:1];
        //Class check on activity indicator
        if ([spinner isKindOfClass:[UIActivityIndicatorView class]]) 
        {
            UIActivityIndicatorView *spinnerActivity = (UIActivityIndicatorView*)spinner;
            spinnerActivity.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;
        }
    }
}
于 2013-05-15T20:46:26.567 に答える
2

技術的には可能ですが、サポートされていません。あなたは Dave の提案に従うか、そう主張するなら読み進めたほうがよいでしょう。

のサブビューを調べるUIRefreshControlと、 class の 1 つのサブビューが含まれていることがわかります_UIRefreshControlDefaultContentView

次に、そのコンテンツ ビューのサブビューを更新状態で確認すると、次の内容が含まれます。

  • UILabel
  • UIActivityIndicatorView
  • UIImageView
  • UIImageView

したがって、技術的には、イベントへのコールバックでUIControlEventValueChanged次のようなことができます。

UIActivityIndicatorView *spinner = [[[[self.refreshControl subviews] lastObject] subviews] objectAtIndex:1];
spinner.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;

そして、それはうまくいくでしょう。また、プライベート API を使用しないため、アプリ レビュー ガイドラインにも違反していません (ビューのサブビューを参照し、パブリック API を使用してそれらを操作することは合法です)。ただし、 の内部実装はUIRefreshControlいつでも変更される可能性があり、iOS の新しいバージョンではコードが機能しなくなったり、クラッシュしたりする可能性があることに注意してください。

于 2013-05-11T22:03:54.647 に答える