2010-04-18 60 views
3

我對iPhone的開發很陌生,一直在努力尋找我認爲是解決這個問題的方法。刷新UINavigationController層次結構中的UITableView的最佳方式

我有一個用戶界面,其中記錄數據的摘要顯示在導航控制器內的表中。當用戶點擊一行附件按鈕時,新的視圖被推到導航控制器上,顯示一個視圖,用戶可以在相應的記錄中編輯數據。完成後,編輯視圖從導航控制器的堆棧彈出,用戶返回到表格視圖。

我的問題是,當用戶返回到表視圖時,該表仍然顯示記錄編輯前的數據狀態。因此,我必須重新加載表格數據以顯示更改。

在顯示錶數據之前似乎無法重新加載表數據,因爲調用只會更新顯示的記錄。在表格顯示後重新加載會導致舊數據在用戶眼前發生變化,我不太滿意。

在我看來,這似乎是想在iPhone應用程序中做的非常正常的事情。

任何人都可以請建議最佳實踐方法來做到這一點?我覺得我失去了一些東西。

乾杯 - 史蒂夫。

回答

13

我會以下列方式實現這一點:

  1. 節省單擊的單元格的indexPath。

  2. 實現-[UIViewController viewWillAppear:]視圖控制器的方法,其中包含UITableView。如果保存indexPath不是零,重新加載指定的細胞:

    -[UITableView reloadRowsAtIndexPaths:withRowAnimation:]

16

的標準方法可能聽起來像很多的麻煩在第一,但對很多的情況下,一個有用的模式。

在你的tableview類中創建一個方法,如:

-(void)editDone { 
    [self.tableView reloadData]; 
} 

添加屬性來喜歡你的編輯器:

@property (assign) id delegate; 

將委託點擊你的附件時:

editController.delegate = self; 

編輯完成後,請按如下方式調用您的方法:

[delegate performSelector:@selector(editDone) withObject:nil]; 

您可以創建類似的方法來處理編輯組件的取消,或執行解除模態編輯控制器等操作。如果您願意,可以將所有這些放在協議中,這被認爲更加優雅。

相關問題