2012-07-08 27 views
0

我有一個刷新按鈕,執行一個函數來發起請求並接收響應。在解析響應時,我正在更改最新的更新文本,以便讓用戶瞭解正在發生的事情。我希望在「過程」運行時,刷新按鈕變成uiactivityindicator。我怎樣才能做到這一點?以下是我的故事板的截圖,可幫助您瞭解設置。讓我知道我是否可以提供其他任何東西。謝謝!下面iPhone:如何在任務運行時將刷新的UIBarButtonItem更改爲UIActivityIndi​​cator?

storyboard image

圖片顯示瞭如何創建底欄通過模擬指標列表下拉的權利。

bottom toolbar

編輯:

下面是我從標出答案使用變造的代碼。

// Create UIActivityIndicator UIBarButtonItem 
UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 
[activityView startAnimating]; 
UIBarButtonItem *loadingView = [[UIBarButtonItem alloc] initWithCustomView:activityView]; 

// Toolbar with LoadingView and LastUpdatedTitle with Flex Spacing 
[self.navigationController.toolbar setItems:(NSArray *)[NSArray arrayWithObjects: loadingView, self.flexSpaceOne, self.lastUpdated, self.flexSpaceTwo, nil]]; 

當我想改回我簡單的「復位」我用同樣的方法setItems:arrayWithObjets:項目。除此之外,我會用self.refreshButton更改加載視圖。

回答

2

定義一些實例變量訪問工具欄和物品:

NSMutableArray *toolbarItems; 
IBOutlet UIToolbar *toolbar; 

然後,在你的方法,你開球任務,

UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 25, 25)]; 
UIBarButtonItem *loadingView = [[UIBarButtonItem alloc] initWithCustomView:activityView]; 
[toolbarItems replaceObjectAtIndex:0 withObject:loadingView]; 
toolbar.items = toolbarItems; 

然後做反當它做再次添加你的刷新按鈕。

+0

謝謝@Coneybeare,但我無法將*工具欄與我的底部工具欄連接起來。如果你看看我的第二張截圖,我會在模擬指標下添加底部工具欄。但我不明白我如何選擇工具欄來執行Ctrl +單擊以將其與變量鏈接起來。 – daveomcd 2012-07-09 00:36:58

+0

您也可以將其作爲navigationcontroller.toolbar進行訪問。我建議讀一下IB或者提出一個不同的SO問題 – coneybeare 2012-07-09 00:38:23

+0

爲了讓它工作,我不得不做一些不同的事情,但是這給了我一個總體思路,並讓我走了。我很感激!如果其他人對我完成它的方式感興趣,我將把它添加到我的原始文章中。再次感謝! – daveomcd 2012-07-15 23:50:20

0

這是使用塊並啓動另一個線程的好時機。

- (IBAction)refresh:(id)sender 
{ 
    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    [spinner startAnimating]; 
    self.navigationItem.rightBarButtonItem = [[BarButtonItem alloc] initWithCustomView:spinner]; 
    dispatch_queue_t request = dispatch_queue_create("request data", NULL); 
     dispatch_async(request, ^{ 
      // call the method to request data 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       self.navigationItem.rightBarButtonItem = sender; 
       // populate the table with the data 
     }); 
    }); 
    dispatch_release(request); 
} 

你會注意到(當然),我沒有把微調器放在你想要的地方。這是因爲我對如何訪問工具欄項目沒有信心 - 但希望這會讓你走上正軌。

+0

我發現@coneybeare知道如何訪問工具欄。檢查他的答案。儘管如此,當你通過網絡獲取數據時,我仍然認爲你應該啓動另一個線程。 :) – 2012-07-09 00:31:42

+0

當然,但這不是這個問題的根本所在。他在問如何更換UIBarButtonItem。他如何設置他的數據是針對不同的SO問題。 – coneybeare 2012-07-09 00:35:53

+0

採取了一點,但我覺得線程在這裏是相關的,因爲@daveomcd想要顯示微調,並更改他的「最新更新」文本,以保持用戶最新「**而它正在解析響應。 – 2012-07-09 00:48:14

相關問題