Я создаю приложение, где у меня есть несколько разделов в UITableView. Мое текущее решение собирает мои данные в словаре, а затем выбирает один ключ для каждого раздела. Есть ли лучшее решение?Лучший способ заполнить строки в разделе в UITableView?
ответ
Здесь это быстрый пример, который я написал. Обратите внимание, что он подвержен ошибкам, поскольку он не проверяет, существуют ли ключи, не создавая надлежащую ячейку.
Вы можете сделать это со словарем, так как вы можете перебирать его содержимое.
Надеется, что это помогает:
class AwesomeTable: UITableViewController {
private var tableContent: [[String]] = [["Section 1, row 1", "Section 1, row 2"], ["Section 2, row 1", "Section 2, row 2"]]
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return tableContent.count
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tableContent[section].count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath)
let item = tableContent[indexPath.section][indexPath.row]
cell.textLabel?.text = item
return cell
}
}
Это не очень хорошая практика. 1). В больших масштабах очень сложно поддерживать содержание этого словаря. 2). Практически невозможно сортировать или заказывать большие словари. 3). Очень сложно создавать очень сложные клетки 4). Если у вас более 1 или 2 типа клеток, это становится бесполезным в вашей ячейкеForRowAtIndexPath 5). Ничто не установлено явно. Вы только реле на правильном содержании словаря, что не хорошо. –
Согласен, однако задал вопрос, на который он отвечает. Есть много способов сделать это (путь) лучше, один из них - ответ, который вы дали. В вашем ответе код чище и легче читать, однако я бы хотел утверждать, что сложность будет примерно одинаковой. –
Реализация table view datasource следующим образом: -
1) не указан number of sections = нет ключей в словаре
2) в разделе No of rows = нет значений в словаре по индексу (секция)
Один из хороших способов к ней - прямому отображение модели, особенно хорошо с быстрыми перечислениями. Например, у вас есть 2 разных раздела с тремя типами строк. Ваш код перечисления и ViewController будет выглядеть так:
enum TableViewSectionTypes {
case SectionOne
case SectionTwo
}
enum TableViewRowTypes {
case RawTypeOne
case RawTypeTwo
case RawTypeThreeWithAssociatedModel(ModelForRowTypeNumberThree)
}
struct ModelForRowTypeNumberThree {
let paramOne: String
let paramTwo: UIImage
let paramThree: String
let paramFour: NSData
}
struct TableViewSection {
let type: TableViewSectionTypes
let raws: [TableViewRowTypes]
}
class ViewController: UIViewController, UITableViewDataSource {
var sections = [TableViewSection]()
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return sections[section].raws.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let raw = sections[indexPath.section].raws[indexPath.row]
switch raw {
case .RawTypeOne:
// Here return cell of first type
case .RawTypeTwo:
// There return cell of second type
case .RawTypeThreeWithAssociatedModel(let modelForRawTypeThree):
// And finally here you can use your model and bind it to your cell and return it
}
}
}
Какие преимущества? Сильная типизация, явное моделирование и явная обработка различных типов ячеек. Единственное, что вам нужно сделать в этом сценарии, - это проанализировать ваши данные в этих перечислениях и структурах, а также сделать это для ваших словарей.
Это кажется очень перспективным для решения моей проблемы. Однако я не могу понять, как разбирать эти данные из базы данных firebase в перечисление. Могу ли я просто загрузить данные из моей базы данных непосредственно в перечисление? Или где я могу выполнить этот шаг? У меня уже есть структура как ModelForRowTypeNumberThree в моей. В моем приложении все строки будут одинаковыми, но заполнены 4 различными NSDictionarys. Это возможно? – AlexVilla147
- 1. UITableView cellForRowAtIndexPath и numberOfRowsInSection - лучший способ заполнить
- 2. UITableView количество строки в разделе
- 3. UITableView visibleCells (в разделе?)
- 4. selectedIndexPath в разделе UITableView
- 5. Как сортировать строки в определенном разделе uitableview
- 6. Лучший способ реализовать Accordian в UITableView
- 7. Самый эффективный способ заполнить UITableView
- 8. iOS - Лучший способ добавить строки в UITableView с задержкой?
- 9. Лучший способ заполнить/управлять видами в Android?
- 10. Получить последнюю ячейку в разделе UITableview
- 11. Лучший способ реализовать поля в UITableView?
- 12. Лучший способ сделать подкачку в UITableView
- 13. Лучший способ анимировать индекс UITableView?
- 14. Лучший способ заполнить событие Click?
- 15. Лучший способ заполнить хеш-рубин?
- 16. добавить подразделы в разделе UITableView
- 17. Ошибка в разделе UITableview - objc_msgSend
- 18. Как заполнить разделы в UITableView
- 19. Добавить текст в разделе таблицы в UITableView
- 20. UITableView - Контроль или предотвращение удаления для определенной строки в разделе
- 21. Лучший способ заполнить SQLiteDatabase исходными данными?
- 22. iPhone: повторяющиеся строки в каждом разделе группового UITableview
- 23. Повторяющиеся элементы в UITableView в разделе
- 24. Область выбора UITableViewCell. Как заполнить всю ячейку для верхних/нижних ячеек в разделе Grouped UITableView?
- 25. Лучший способ заполнить DataGridView большим объемом данных
- 26. Лучший способ заполнить wstring с сопзЬ полукокса *
- 27. Лучший способ заполнить пробелы в многомерном массиве в Ruby
- 28. Компилятор: какой лучший способ заполнить таблицу символов?
- 29. Невозможно заполнить в UITableView Swift
- 30. MVC: Лучший способ заполнить Html .DropDownList
1) Нет секций = нет ключей в словаре 2) Нет строк в разделе = нет значений в словаре по индексу (раздел) – pkc456
Точно так и это способ сделать это? – Recusiwe
Да, это правильный путь. Должен ли я поделиться этим кодом? – pkc456