Как вернуть номер источника данных tableOfRowsInSection на основе массива заголовков с фиксированными разделами - PullRequest
0 голосов
/ 30 октября 2019

Я не могу понять, как правильно настроить мой источник данных, чтобы убедиться, что мое табличное представление знает правильный numberOfRowsInSection на основе массива, который я построил для titleForHeaderInSection, с префиксом порядка секций

Arrayдля заголовков разделов (хранится в файле констант)

var eventFeedSectionsTitles = ["live", "completed", "active" ]

Группировка данных событий в разделы

var sections = [EventStatus]()

'

struct EventStatus {
var eventStatus: String?
var events: [Event]
}

,

getTableViewData { (events) in
         self.events = events
         //self.tableView.reloadData()

     print("events count: \(events.count)")

     let groups = Dictionary(grouping: self.events) { (event) -> String in  //change to events
         return event.eventStatus!
     }

     print("These are the groups: \(groups)")
     self.sections = groups.map { (eventStatus, events) in  
         EventStatus(eventStatus: eventStatus, events: events)  
     }
         print("These are the sections: \(self.sections)")

         self.tableView.reloadData()
     }

Результаты для группы:

["active": [Gallery.Event, Gallery.Event], "archived": [Gallery.Event, Gallery.Event, Gallery.Event, Gallery.Event], "live": [Gallery.Event, Gallery.Event], "created": [Gallery.Event], "completed": [Gallery.Event]]

Результаты для секций:

[Gallery.EventStatus(eventStatus: Optional("active"), events: [Gallery.Event, Gallery.Event]), Gallery.EventStatus(eventStatus: Optional("archived"), events: [Gallery.Event, Gallery.Event, Gallery.Event, Gallery.Event]), Gallery.EventStatus(eventStatus: Optional("live"), events: [Gallery.Event, Gallery.Event]), Gallery.EventStatus(eventStatus: Optional("created"), events: [Gallery.Event]), Gallery.EventStatus(eventStatus: Optional("completed"), events: [Gallery.Event])]

Настройка источника данных TableView

Это рабочий код, который размещает каждый раздел в случайном порядке.

override func numberOfSections(in tableView: UITableView) -> Int {

        return sections.count
    }

    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {


        let section = sections[section]
        let status = section.eventStatus
        return status
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        let section = sections[section]
        let status = section.eventStatus

        return section.events.count  
    }



    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "HomeFeedTableViewCell", for: indexPath) as! HomeFeedTableViewCell
        let section = self.sections[indexPath.section]
        let event = section.events[indexPath.row]


        //Set the details for the cell
        cell.setEvent(event)

        return cell
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        let eventStatus = sections[indexPath.section]
        let selectedEvent = eventStatus.events[indexPath.row]

        event = selectedEvent

        //Trigger the seque to the detail view .inputViewController
        performSegue(withIdentifier: Constants.Segue.homeFeed2eventDetailViewController, sender: self)

    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        if let eventDetailVC = segue.destination as? EventDetailTableViewController {

        eventDetailVC.event = event
        //EventDetailTableViewController.delegate = self

    }
    }

Я успешно преобразовал numberOfSections для возврата с использованием массива с префиксом:

return Constants.eventFeedSectionsTitles.count

И преобразовал titleForHeaderInSection в

    let section = Constants.eventFeedSectionsTitles[section]
    return section

Но не могу понять синтаксис для numberOfRowsInSection . Я знаю, что мне нужно сначала получить строку заголовка (такую ​​же, как titleForHeaderInSection) и найти эту группу в разделах и подсчитать events в этой группе, но мне нужна помощь с кодом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...