Я не могу понять, как правильно настроить мой источник данных, чтобы убедиться, что мое табличное представление знает правильный 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
в этой группе, но мне нужна помощь с кодом.