UINavigationBar titleView中iOS 6和UIActivityIndi​​cator的问题

时间:2012-09-25 12:10:44

标签: ios6 uiactivityindicatorview uinavigationitem

自从iOS 6以来一直遇到这个问题。我无法弄清楚是什么原因会导致这种行为发生变化。这曾经在5中完美地运作。现在活动指标不及时或根本没有出现。任何帮助将非常感激。

-(void)myMethod
{
    UIView *currentTitleView = [[self navigationItem] titleView];


    // Create an activity indicator and start it spinning in the nav bar
    UIActivityIndicatorView *aiview = [[UIActivityIndicatorView alloc]     initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];

    [[self navigationItem] setTitleView:aiview];
    [aiview startAnimating];

    // Start of Block code
    void (^block)(arg1, arg2) =
    ^(arg1, arg2)
    {
       block code;
       [aiview stopAnimating];
       [[self navigationItem] setTitleView:currentTitleView];
    };
// End of Block code




}

1 个答案:

答案 0 :(得分:0)

听起来像是从后台线程调用myMethod。作为一般规则,与UIKit元素(包括UIActivityIndicatorView)的所有交互应始终在主线程上完成。尝试使用GCD将UI代码移动到主队列(a.k.a。主线程)。

-(void)myMethod {
    dispatch_async(dispatch_get_main_queue(), ^{
        UIView *currentTitleView = [[self navigationItem] titleView];

        // Create an activity indicator and start it spinning in the nav bar
        UIActivityIndicatorView *aiview = [[UIActivityIndicatorView alloc]     initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];

        [[self navigationItem] setTitleView:aiview];
        [aiview startAnimating];
    });

    // Start of Block code
    void (^block)(arg1, arg2) =
    ^(arg1, arg2)
    {
       block code;

        dispatch_async(dispatch_get_main_queue(), ^{
           [aiview stopAnimating];
           [[self navigationItem] setTitleView:currentTitleView];
        });
    };
// End of Block code
}