我有一个{J}文件创建的tableview
,用于跟踪单元格的已检查/未检查状态。唯一的问题是当我实现SearchResults
视图时,我的结果是不正确的,因为我检查了索引路径上的单元格,并更新了相应的JSON条目(SubscribeStatus
)。
var cell = tableView.CellAt(indexPath);
想知道是否有其他方式修改,或想出另一种方法,考虑到显示的搜索结果的正确索引。以下是一些示例代码:
public override void RowSelected(UITableView tableView,NSIndexPath indexPath)
{
var cell = tableView.CellAt(indexPath);
var value = this.tableviewController.TableView==search.SearchResultsTableView ? filteredDataList[indexPath.Row] : dataList[indexPath.Row];
if (value.Selected)
{
value.Selected = false;
var uncheckedImage = new UIImageView (UIImage.FromBundle("unchecked"));
cell.AccessoryView = uncheckedImage;
string documentsPath = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
var localPath = Path.Combine (documentsPath, "marketnibble_sample_customers.json");
string json = File.ReadAllText (localPath);
dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject (json);
jsonObj ["Business"] [indexPath.Row] ["SubscribeStatus"] = false;
string output = Newtonsoft.Json.JsonConvert.SerializeObject (jsonObj);
File.WriteAllText (localPath, output);
}
else
{
value.Selected = true;
var checkedImage = new UIImageView (UIImage.FromBundle("checked"));
cell.AccessoryView = checkedImage;
string documentsPath1 = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var localPath1 = Path.Combine(documentsPath1, "marketnibble_sample_customers.json");
string json = File.ReadAllText(localPath1);
dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject (json);
jsonObj["Business"][indexPath.Row]["SubscribeStatus"] = true;
string output = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj);
File.WriteAllText (localPath1, output);
}
cell.Selected = false;
tableviewController.TableView.ReloadData ();
}
我听说过用cell.Tag()
做到这一点的方法,但是没有线索从哪里开始。什么是最好的方法来解决这个问题?
答案 0 :(得分:1)
您需要一种除indexPath以外的方法将单元格映射到其基础数据。您可以使用Tag属性执行此操作 - Tag只是一个可以用于任何您喜欢的字符串。最简单的方法是将JSON元素的ID或Key属性存储在Tag中,然后只要选择了一个单元格,就可以使用Tag proprerty在JSON中查找底层数据并进行相应的更新。
答案 1 :(得分:0)
目前,您正在将数据存储在文件中。您可以为持久存储执行此操作。但是,如果你使用coredata而不是更有帮助,我建议这不是好方法。
您必须创建一个将存储您的选择状态的实体。
还有一件事就是不需要在选择行上重新加载表只更新选择行。