2015-02-20 2 views
0

Я хочу фильтровать табличное представление на основе значения String, заданного пользователем. Табличное представление создается с помощью ячейки, состоящей из нескольких компонентов (изображений, меток и т. Д.), Которые расположены в «беспорядке» массивов и словарей. Я использую код ниже. Когда я фильтрую, я просто скрываю ячейки, но они все еще занимают место в представлении таблицы. Каков наилучший способ применения фильтра и, тем самым, получить только ячейки, которые соответствуют? Поле, на которое я фильтруюсь, является темой.Как фильтровать динамически созданное табличное представление, основанное на выборе пользователя

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    if filterChoice == "Alle" 
    { 
     var cell = tableView.dequeueReusableCellWithIdentifier("NewsCell") as News_TableViewCell 
     cell.subject!.text = subjects[indexPath.row] 
     if videoEmbedCode.valueForKey(self.recordIDs[indexPath.row]) != nil 
     { 
      var iframeCode: NSString = videoEmbedCode.valueForKey(self.recordIDs[indexPath.row]) as String 
      var html = "<html><body>\(iframeCode)</body></html>" 
      cell.webView.loadHTMLString(html, baseURL :nil) 
      cell.webView.hidden = false 
     } else if self.imageCache.valueForKey(self.recordIDs[indexPath.row]) != nil 
     { 
      cell.newsImage.image = self.imageCache.valueForKey(self.recordIDs[indexPath.row]) as? UIImage 
      cell.newsImage.hidden = false 
     } else 
     { 
     } 
     if topics.valueForKey(self.recordIDs[indexPath.row]) != nil 
     { 
      cell.topicLabel.text = topics.valueForKey(self.recordIDs[indexPath.row]) as? String 
     } 
     else 
     { 
      cell.topicLabel.text = "" 
     } 
     return cell 
    } 
    else if topics.valueForKey(self.recordIDs[indexPath.row]) as? String == filterChoice 
    { 
     //Only return cells with specified topic 
     var cell = tableView.dequeueReusableCellWithIdentifier("NewsCell") as News_TableViewCell 
     if topics.valueForKey(self.recordIDs[indexPath.row]) != nil 
     { 
      cell.topicLabel.text = topics.valueForKey(self.recordIDs[indexPath.row]) as? String 
     } 
     else 
     { 
      cell.topicLabel.text = "" 
     } 

     cell.subject!.text = subjects[indexPath.row] 

     if videoEmbedCode.valueForKey(self.recordIDs[indexPath.row]) != nil 
     { 
      var iframeCode: NSString = videoEmbedCode.valueForKey(self.recordIDs[indexPath.row]) as String 
      var html = "<html><body>\(iframeCode)</body></html>" 
      cell.webView.loadHTMLString(html, baseURL :nil) 
      cell.webView.hidden = false 
     } else if self.imageCache.valueForKey(self.recordIDs[indexPath.row]) != nil 
     { 
      cell.newsImage.image = self.imageCache.valueForKey(self.recordIDs[indexPath.row]) as? UIImage 
      cell.newsImage.hidden = false 
     } else 
     { 
     } 
     return cell 
    } 
    else 
    { 
     var cell = UITableViewCell() 
     cell.hidden = true 
     return cell 
    } 
} 

ответ

0

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

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     // Here 
} 

Если вы просто сделаете cell.hidden = true, пространство не исчезнет, ​​оно просто скроет содержимое. Это связано с тем, что все раскладки ячеек вычисляются другими способами.

Если вы хотите, чтобы скрыть место для таких клеток можно было выбрать несколько решение:

  1. (Best) рассчитать количество не скрытых клеток, вернуть новый отсчет в func tableView(tableView: UITableView, numberOfRowsInSection section: Int) и пересчитывать словарь с информацией для func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
  2. Это нехорошее решение, но для вашей проблемы может иметь место. В методе, который запрашивал для tableView ячейки высота func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat, просто возвращает 0 для скрытых ячеек.
+0

Не хотите ли вы разработать немного? Tnx. –

+0

Может быть, я немного смущен, вам нужно отфильтровать ячейки таблицы, но получить empy speces? –

+0

Код работает нормально. Проблема в возврате Пустой ячейки не является хорошим решением. Потому что он все еще занимает место в представлении таблицы. Представляю себе что-то о хранении тем в другом массиве, а затем сопоставляем с фильтрующей строкой. –

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