Я хотел бы отсортировать свои элементы в разделе UITableView.Таким образом, на скриншоте ниже в разделе «N / A» «папа» должен идти первым, а затем «Привет».В разделе «Последние 7 дней» элементы также должны быть отсортированы в алфавитном порядке.
![enter image description here](https://i.stack.imgur.com/9UNHH.png)
Я не могу понять, где в жизненном цикле таблицы находитсясортировать предметы.Сортировка моей модели (список элементов) и использование ее с UITableView, похоже, не помогает.
РЕДАКТИРОВАТЬ
Пожалуйста, найдите ниже мой код.Теперь я понимаю, что лучше всего не только сортировать, но и фильтровать мои элементы в отдельные списки, по одному для каждого отображаемого раздела.Это лучше с точки зрения производительности, так как tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
продолжает вызываться для каждого отображаемого элемента.Несмотря на то, что он не вызывается для общего общего количества элементов, все равно будет неаккуратно сортировать главный список элементов каждый раз, когда отображается новый элемент.
Меня беспокоит то, чтоколичество секций может изменяться динамически и может достигать довольно большого числа (до 8).Группировка по разделам также может варьироваться - либо по приоритету, либо по срокам.Итак, я думаю, что мне нужно создать более сложную структуру данных для моей модели - вместо текущего простого списка и функций, которые его фильтруют и сортируют во время «отображения» класс с несколькими отсортированными списками, по одному для каждого раздела, может быть,,Мне нужно будет создать несколько таких классов, в зависимости от того, по какой группе пользователей.И эти классы также должны иметь пользовательские функции для поиска в модели элемента, который был нажат / обновлен на основе indexPath.Имеет смысл, хотя.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// Since I register the TableViewCell class to be used to create a new table view cell in viewDidLoad(), when tableView:cellForRowAtIndexPath: next needs a table cell, your new class will be used automatically.
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TableViewCell
// special case for empty, "add reminder" cell
cell.toDoItem = nil
if (indexPath as NSIndexPath).section >= ReminderDue.sections.count {
return cell
}
// If a proper reminder is chosen
if let definiteList = self.groupByDelegator.getReminderList() {
// Take the master list of items and return a filtered sublist of items that belong to that section
let sectionItems = ReminderDue.getReminders(definiteList, inSection: ReminderDue.sections[(indexPath as NSIndexPath).section])
// Do the sorting here
let QUERY_SETTINGS_KEY = "querysettings"
if let definiteIndex = reminderListController.indexOfDisplayedCalInMenu {
let definiteSetting = loadQuerySetting(definiteIndex, saveKey: QUERY_SETTINGS_KEY)
sectionItems.sortBy(definiteSetting.sortBy)
}
cell.selectionStyle = .none // This gets rid of the highlighting that happens when you select a table cell.
// If a reminder (i.e., not the empty row at the end.)
if !sectionItems.list.isEmpty && (indexPath as NSIndexPath).row < sectionItems.count {
// cell.delegate = self
cell.delegate = updateReminderDelegate // Assign as the TableViewCell's delegate the ReminderMainVC (via its UpdateReminderDelegate)
let rem = sectionItems.list[(indexPath as NSIndexPath).row]
cell.toDoItem = rem
}
}
return cell
}