2011-05-16 22 views
4

我目前有一個簡單的表格,其中有7個單元格。當選中一行時,我將一個複選標記添加到單元格中,反之亦然,當已選中的單元格被選中時,它未被選中。iPhone - 保持tableview狀態的最簡單方法?

然而,當我回去了的tableview並返回所有的複選標記都沒有了。

我想知道什麼是IOS保持檢查電池的狀態,因此當我回到談判桌查看查馬克依然存在的檢查電池的簡單的解決方案?

回答

1

做到這將是在表視圖保存在某個地方,這些檢查狀態的最簡單方法。這假定當你離開屏幕時你的表格視圖留在內存中。如果表格視圖沒有被保存在內存中(就像在你決定在那裏導航時分配它並在你離開時被釋放),那麼它可能是最容易將它保存在應用程序委託中的某處的,因爲我們知道在內存中剩餘的應用程序的生命週期

+0

這是一個非常糟糕的建議,並打破了MVC模式。他所追求的是提供細胞的數據源,而不是桌面本身。 – jer 2011-05-16 17:27:44

+0

我不明白爲什麼這打破了MVC模式,比其他的事實,我選擇的位置來描述保存數據的心不是明確一個「樣板」對象,或者爲什麼它使一個糟糕的建議。 – 2011-05-16 17:34:25

+0

您選擇的位置來形容,其中保存的數據是視圖對象(實現代碼如下),這是錯誤的地方,即使保存這種信息的看法是罰款,這將會是小區的一個屬性案件。然而,即使這是錯誤的,因爲這是用來填充單元格的數據,並不是單元格繪圖代碼的一部分,等等。它是經典的數據模型,數據。 – jer 2011-05-16 17:40:33

1

你想要做的是在你的數據模型,它提供了每個單元格的設置數據,添加一個標誌(如果你還沒有),將用於指示這個案例。根據您的特定單元格的數據模型,確保在tableView:cellForRowAtIndexPath:的單元格中設置複選標記。

當你回到它時,如果你的數據源沒有改變,當tableview在顯示tableview之前再次設置它的單元格時,它會根據數據中的設置使用這些數據來顯示覆選標記資源。 SQLite中

0

店的tableview狀態保存NSUserDefaults的中國家。

在didSelectRowAtIndexPath方法的tableView委託方法

設定這樣的用戶默認:

NSUInteger defaultsCheckedRow=[[NSUserDefaults standardUserDefaults] integerForKey:@"rowForCheckedCellInNameOfTableViewController"]; 
if (defaultsCheckedRow==indexPath.row){ 
    // deselect the row 
    defaultsCheckedRow=defaultsCheckedRow*-1; 
}else{ 
    defaultsCheckedRow=indexPath.row; 
} 
[[NSUserDefaults standardUserDefaults] setInteger: defaultsCheckedRow forKey: "rowForCheckedCellInNameOfTableViewController"] 
[[NSUserDefaults standardUserDefaults] synchronize]; 
[self.tableView reloadData]; 

然後在您的cellForRowAtIndexPath:數據源委託方法你可以做線沿線的東西:

NSUInteger defaultsCheckedRow=[[NSUserDefaults standardUserDefaults] integerForKey:@"rowForCheckedCellInNameOfTableViewController"]; 
if (indexPath.row==defaultsCheckedRow){ 
    cell.accessoryType=UITableViewCellAccessoryCheckmark; 
}else{ 
    cell.accessoryType=UITableViewCellAccessoryNone; 
} 
+0

lol;當然不是「最簡單的」解決方案... – Rob 2012-08-11 00:37:36