mr_Iurii
@mr_Iurii
Искатель

Проблема с добавлением секций в TableView?

Здравствуйте, возможно вопрос тривиален, но все же у меня затык.
Добавляю таблицу realm в TableView
БД realm содержит таблицу Spending с заголовками: category(string), sum(int), day(int).
 Необходимо чтобы в таблице TableView категория и сумма выводились в секции по дням.
В моей реализации выводится секции с одинаковым содержимым ячеек.
Подскажите в чем ошибка.

мой код:

extension ViewController:UITableViewDelegate,UITableViewDataSource {
    //количество  строк в секции
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {///сюда
        // возвращаем количество записей в массиве
        // считаем сколько дат есть в таблице
        let section = spendingArray[section].day
        return section
    }
    
    //количество секций
    func numberOfSections(in tableView: UITableView) -> Int {
        var num = Array<Int>()
        for i in spendingArray{// создаем массив из дней
            num.append(i.day)
        }
        let unique = Array(Set(num)) //создаем массив из уникальных элементов
        return unique.count
       
    }

// заголовок секции
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return "\(section)"
    }
    
    //ширина ячеек в таблице
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 70
    }

  // параметры ячейки
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        //let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CustomTableViewCell
       // переменнная влючающая все элементы массива spendingArray, которые будут совпадать по индексам
        
        var num = Array<Int>()
        
        for i in spendingArray{// создаем массив из дней
            num.append(i.day)
        }
        
        let section = spendingArray[indexPath.section]
        
        let spending = section[indexPath.row]     // в секции ищем дату
       
       cell.recordCategory.text = spending.category
       cell.recordSum.text = "\(spending.sum)"  //интерпаляция строк
         
        return cell
        
    }
  • Вопрос задан
  • 149 просмотров
Пригласить эксперта
Ответы на вопрос 1
briahas
@briahas
ObjC, Swift, Python
Советую вам преобразовать ваш spendingArray в отдельный объект который будет с той структурой с которой вам удобно работать.
Т.е. - либо массив объектов типа DaySection, в котором будут собранны категории и суммы
либо дикшионари в котором ключи это День, а значение категори и суммы.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы