2012-09-25 17 views
5

自iOS 6以來一直存在問題。我無法弄清楚會導致此行爲的最新變化。這用於在5中完美地工作。現在活動指標不及時或根本沒有出現。任何幫助將非常感激。UINavigationBar title中的iOS 6和UIActivityIndi​​cator的問題查看

-(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

問題可能不在活動指示器方法本身,但可能是任何調用它。您是否嘗試過記錄您的AI方法以確保它可靠地被調用? – DenVog

回答

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 
} 
相關問題