【问题标题】:TableView RowSelected with SearchResultsTableView: Keeping Track of Cell Index for CheckMark使用搜索结果选择 TableView 行 TableView:跟踪 CheckMark 的单元格索引
【发布时间】:2016-05-25 05:46:30
【问题描述】:

我有一个tableview,它是从一个跟踪单元格的选中/未选中状态的 JSON 文件创建的。唯一的问题是,当我实现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() 执行此操作的方法,但不知道从哪里开始。解决这个问题的最佳方法是什么?

【问题讨论】:

    标签: c# json uitableview xamarin.ios uisearchdisplaycontroller


    【解决方案1】:

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

    【讨论】:

    • 谢谢。这是要走的路!
    【解决方案2】:

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

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

    还有一件事不需要在选择行上重新加载表,只需更新该选择行。

    【讨论】:

    • 谢谢会调查它,我认为 Tag 属性是要走的路。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多