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

0
patrickb100 11 Янв 2021 в 20:55

1 ответ

Лучший ответ

Я бы сделал ViewModel, который больше подходит для вашего табличного представления.

struct LineSections {
    let lineId: String?
    let lineName: String?
    let nodes: [LineRow]
}

Я предполагаю, что у вас где-то есть var LineRows: [LineRows] = [] как свойство вашего ViewController. Я бы поменял его на var lineSections: [LineSections] = [].

Затем,

self.LineRows = food!.Linerowset?.Linerows ?? []
let rows = food?.Linerowset?.Linerows ?? []
self.lineSections = Dictionary(grouping: rows, by: { $0.lineId }).values.compactMap { LineSections(lineId: $0.first?.lineId, lineName: $0.first?.lineName, nodes: $0) }.sorted(by: { $0.lineId ?? "" < $1.lineId ?? "" }

В вашем табличном представлении заполняется:

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return lineSections[section].node.count
}

override func numberOfSections(in tableView: UITableView) -> Int {
    return lineSections.count
}

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

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
    let person = lineSections[indexPath.section].node[indexPath.row]
    cell.textLabel?.text = person.Nodename
    return cell
}

Не связано: назовите вашу переменную, начиная с нижнего регистра: let Cell => let cell и т. Д.

1
Larme 14 Янв 2021 в 14:19