0

У меня есть tableview, который я создал из файла JSON, который отслеживает статус проверки/неконтролируемой ячейки. Единственная проблема заключается в том, что когда я реализовал вид SearchResults, мои результаты искажены, потому что я проверяю ячейку по пути индекса, и я обновляю соответствующую запись JSON (SubscribeStatus).TableView RowSelected with SearchResultsTableView: отслеживание индекса ячейки для CheckMark

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(), но не имеют понятия, с чего начать. Какой был бы лучший способ приблизиться к этому?

ответ

1

Для сопоставления ячейки с базовыми данными вам нужен способ, отличный от indexPath. Вы можете использовать свойство Tag для этого. Тег - это просто строка, которую вы можете использовать для любых задач. Самый простой подход - сохранить свойство ID или Key вашего элемента JSON в теге, а затем всякий раз, когда будет выбрана ячейка, вы можете использовать свойство Tag для поиска базовых данных в JSON и соответствующим образом обновить его.

+0

Спасибо. Это путь! – pkozlowski

0

В настоящее время вы сохраняете данные в файле. Вы можете сделать это для сохранения хранилища. Но это не очень хороший способ, который я предложил вместо этого, если вы будете использовать coredata, чем это будет более полезно.

Вы должны создать один объект, который также сохранит ваше состояние выбора.

И еще одно, что нет необходимости перезагружать таблицу в строке выбора, просто обновляющей, которая выбирает только строку.

+0

Спасибо, посмотрим, я думаю, что свойство Tag - это путь. – pkozlowski

 Смежные вопросы

  • Нет связанных вопросов^_^