2011-04-01 34 views
0

我有一個UITableView與項目列表。在我導航到使用顯示所選項目的詳細信息的新視圖項目的選擇:iPhone - 在推送新的ViewController上選擇UITableViewCell前更新當前視圖

DetailsVC *detailsView = [[DetailsVC alloc] initWithNibName:@"DetailsVC" bundle:nil]; 
[self.navigationController pushViewController:detailsView animated:YES]; 

現在,詳細查看從遠程位置獲取數據等連接速度慢可能需要幾秒鐘。我想要做的是在所選行上顯示一個活動指標。

問題是添加的指標的顯示被延遲,直到下一個視圖準備導航到,這使指標變得毫無用處。

我一直試圖在這些兩個事件具有相同效果的添加此指標:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

有沒有辦法在添加指示(或更一般的,修改UITableViewCell的內容)在導航發生之前的選擇時刻。

作爲一個實驗,我也嘗試在相同的兩個事件中彈出一個警報視圖,導致在導航到詳細信息視圖後彈出警報。

回答

0

所以它的[[DetailsVC alloc] init...]需要幾秒鐘,對吧?這個問題是,你所做的任何視圖更改在返回到runloop之前都不會完全生效,因此即使在創建對象之前設置了指示器,它也等待init完成以使其可見。你需要做的是推遲創建你的DetailsVC,直到指標設置完成。

我可能是一個更簡單的改變使用塊,但我不記得那些關於我的頭頂上的細節(沒有使用塊很多,因爲我最近寫的代碼不得不保持兼容3.X)。但使用performSelector是一件容易的事,把這些2行,你在你的問題第一個報價,把他們變成自己的方法,如:

- (void)pushDetailsView { 
    DetailsVC *detailsView = [[DetailsVC alloc] initWithNibName:@"DetailsVC" bundle:nil]; 
    [self.navigationController pushViewController:detailsView animated:YES]; 
} 

而且,你有過這些線路,設置你的指標,然後做這個(0延遲並不意味着立即調用它,而是一路返回了當前調用堆棧後ASAP):

[self performSelector:@selector(pushDetailsView) withObject:nil withDelay:0] 
+0

謝謝,該工作! – mrt 2011-04-04 10:03:39

+0

此外,我遇到了這種解決方法。如果將耗時的operaton放在'DetailsVC'的' - (void)viewDidAppear:(BOOL)animated'而不是' - (void)viewDidLoad'中,視圖將被立即推送,您將能夠顯示活動指示符在那個視角而不是前一個視角。 – mrt 2011-04-04 10:11:39

0

你可以在你的函數中調用cell = [self rowForIndexPath:indexPath]。然後添加指示劑細胞子視圖

+0

作爲一個解釋:我沒有與添加問題指標。問題是讓它看起來更快。 – mrt 2011-04-01 14:27:57

0

您可以

  1. 添加指示器當u選擇行並推動新的視圖時,數據就 (同時去除當時指示器)或
  2. 推新視圖,呼叫網絡服務來獲取相應的單元中的數據(在 viewDidLoad中或viewWillAppear中),並顯示指示器同時 並且當新數據來自刪除指示符
+0

是的,我想做1),問題是如何。數據正在由詳細信息視圖加載。 – mrt 2011-04-01 15:03:00

+0

在數據傳入時在表視圖中設置相應的詳細視圖屬性, – Mahesh 2011-04-01 15:14:02

相關問題