设置UIRefreshControl的UIActivityIndi​​catorView的颜色?

时间:2013-05-11 21:13:34

标签: ios uiactivityindicatorview uirefreshcontrol

有没有办法设置UIActivityIndicatorView的活动指标(可能是UIRefreshControl)的颜色?

我能够设置'橡胶'的颜色和指标:

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

但我希望将'橡胶'蓝色和活动指示器设为白色,这可能吗?

3 个答案:

答案 0 :(得分:3)

这不是官方支持的,但如果您想冒未来的iOS更改破坏代码的风险,可以试试这个:

建立了ayoy的答案,我构建了一个UIRefreshControl的子类,它在beginRefresing中设置ActivityIndi​​cator的颜色。这应该是一个更好的地方,因为你可以在代码而不是用户中调用它来导致动画开始。

@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;
        }
    }
}

答案 1 :(得分:2)

嗯,你在技术上可以做到,但它不受支持。你最好遵循Dave的建议,或者如果你坚持的话继续阅读。

如果你调查UIRefreshControl的子视图,结果证明它包含一个类_UIRefreshControlDefaultContentView的子视图。

如果您在刷新状态下检查该内容视图的子视图,则它包含以下内容:

  • UILabel
  • UIActivityIndicatorView
  • UIImageView
  • UIImageView

在您回调UIControlEventValueChanged事件时技术上,您可以执行以下操作:

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

那会有用。它也不违反App Review Guidelines,因为它不使用私有API(浏览视图的子视图并使用公共API使用它们是合法的)。 但请记住,UIRefreshControl的内部实现可以随时更改,并且您的代码可能无法正常运行,甚至在以后的iOS版本中崩溃。

答案 2 :(得分:1)

不,那是不可能的。您需要提交an enhancement request来要求Apple实施此操作。