4

有没有办法设置 a 的活动指示器(可能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 的回答,我构建了 UIRefreshControl 的子类,它将 ActivityIndi​​cator 的颜色设置为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

好吧,你在技术上可以做到,但它不受支持。你最好听从戴夫的建议,或者如果你坚持的话,请继续阅读。

如果您调查它的子视图,UIRefreshControl结果会发现它包含一个子视图,属于_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 回答
1

不,那是不可能的。您需要提交增强请求以要求 Apple 实施此功能。

于 2013-05-11T21:46:44.400 回答