表视图行与搜索结果表视图一起选定:跟踪单元格索引以查找复选标记



我有一个从 JSON 文件创建的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()做到这一点的方法,但不知道从哪里开始。解决这个问题的最佳方法是什么?

您需要一种 indexPath 以外的方法来将单元格映射到其基础数据。 可以使用 Tag 属性执行此操作 - Tag 只是一个字符串,可用于任何你喜欢的字符串。 最简单的方法是将 JSON 元素的 ID 或 Key 属性存储在标记中,然后每当选择单元格时,都可以使用 Tag proprerty 查找 JSON 中的基础数据并对其进行适当更新。

目前,您正在将数据存储在文件中。您可以为持久存储执行此操作。但这不是我建议的好方法,如果你将使用coredata,它会更有帮助。

您必须创建一个实体来存储您的选择状态。

还有一件事,无需在选择行上重新加载表,只需仅更新该选择行即可。

最新更新