1

我想用刷新按鈕替換刷新按鈕,當用戶按下刷新按鈕時,刷新桌面視圖後,我想將其更改回刷新按鈕。但是當我按下刷新按鈕時,它不會更改爲活動指示器,但刷新按鈕會突出顯示,直到數據重新加載完成。用UIActivityIndi​​catorView替換UIBarButtonItem不起作用

代碼如下。我錯過了什麼?

-(void) reloadNewsStarted{   
UIActivityIndicatorView *activityIndicatorRightBarItem = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)]; 
[activityIndicatorRightBarItem startAnimating]; 
UIBarButtonItem *activityItem = [[UIBarButtonItem alloc] initWithCustomView:activityIndicatorRightBarItem]; 
[activityIndicatorRightBarItem release]; 
self.navigationItem.rightBarButtonItem = activityItem; 
[activityItem release]; 

[self reloadNewsEnded]; 
} 

-(void) reloadNewsEnded { 

//reload data process 

UIBarButtonItem *reloadNewsBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(reloadNewsStarted)]; 
reloadNewsBtn.style = UIBarButtonItemStyleBordered; 
self.navigationItem.rightBarButtonItem = reloadNewsBtn; 
[reloadNewsBtn release]; } 

回答

2

而是寫作

[self reloadNewsEnded]; 

請寫

[NSThread detachNewThreadSelector:@selector(reloadNewsEnded) toTarget:self withObject:nil]; 

這條線在後臺啓動新的線程,所以活動的指標&數據重裝將在兩個線程同時進行。

+0

非常感謝。有用!!! – moon 2010-10-07 10:09:04

0

爲什麼這條線在reloadNewStarted方法

[self reloadNewsEnded]; 

看來年底剛剛撤消更改按鈕?在調用它之前,您應該等待操作完成之後

+0

非常感謝您的幫助。我在 - (void)reloadNewsEnded中獲得了數據重載代碼。 - (void)reloadNewsEnded {//重新載入數據過程//重新分配刷新按鈕}我應該在哪等待? – moon 2010-10-06 03:14:01

0

更改按鈕在運行循環從您的代碼中重新獲得控制權之後纔會生效。這聽起來像你的重新加載操作是同步的,並阻止事件隊列,這將不會發生。如果您的處理需要大量時間,則需要在主運行循環中使用後臺線程或異步處理(例如,通過使用NSURLConnection來管理網絡任務和回調),以便不會阻塞。

相關問題