2016-11-22 6 views
0

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

struct PersonData { 
    let name: String 
    let age: String 
    let sex : String 
} 

Что я хочу сделать, это реализовать pickerView, который перезагрузит представление таблицы в зависимости от того, что пользователь выбирает. Допустим, у меня есть 2 варианта выбора, где пользователь может выбрать пол и возраст.

Так что, если он выбрал всех мужчин с 17-летним, я хочу показать только это на столе.

я уже могу получить счетчик на массив, но я не могу вернуть ноль по методу UITableViewCell

Я хотел сделать что-то вроде этого:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCell(withIdentifier: "reuseCell", for: indexPath) as! CellTeatroTableViewCell 

     if(option == 0) //All persons. Default option 
     { 
      cell.name.text = dataArray[indexPath.row].name 
      return cell 

     } 
     else 
     { 
      if(dataArray[indexPath.row].age == agePickerOption || dataArray[indexPath.row].sex == sexPickerOption) 
      { 
       cell.name.text = dataArray[indexPath.row].name 
       return cell 
      } 
     } 

     return nil 

    } 

Я знаю, я не могу вернуть ноль, так как он ожидает UITableViewCell, но его возможно только увеличить indexPath, если выполняются определенные условия?

Или мне нужно добавить ячейку и удалить ее сразу после? Это звучит не так.

ответ

1

Я бы два массива данных:

allDataArray - все элементы

filteredDataArray - элементы, которые соответствуют вашему фильтру

Если вы используете filteredArray как DataSource вы не нужно ставить эту логику в методе cellForRow.

Вместо этого следует использовать методы выбора делегата для фильтрации allDataArray и положил его на filteredDataArray.

+0

Черт, как я пропустил это? Такое простое решение. Я не знаю, как я мог пропустить использование одного массива в качестве источника данных. Большое спасибо Lopes! – Adrian

+1

Нет проблем;) Хорошее кодирование – LopesFigueiredo

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