В моем представлении таблицы есть одна секция с сущностями массива, отображаемыми в виде строк. Я пытаюсь создать список индексов, который отображается справа, который я могу настроить, и перейду к определенной строке. Пока я могу показать индекс, но он не переходит к определенной строке при нажатии буквы. Он вернется к первой строке при нажатии «A», но ни один из других вариантов индекса не работает. Есть ли обходной путь для этого?
Обновлено: изучали ответ и до сих пор не можете найти способ сделать это.
let respiratory = ["A - Patient Disposition Form","B - On Scene Physician","C - APGAR Score","D - LA Prehospital Stroke Screen","E - Pain Scales","F - Restraint Checklist","G - Abbreviations","H - Reperfusion Checklist","I - Difficult Airway","J - Burn Resources","DNR","NCCEP Airway Evaluation Form","NC MOST Form","PREMIS Preliminary Report","NC Eye Bank"]
let indexList = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","AA"]
func sectionIndexTitles(for tableView: UITableView) -> [String]? {
return indexList;
}
func sectionIndexTitlesForTableView( for tableView: UITableView) -> [AnyObject]! {
return respiratory as [AnyObject]
}
@IBOutlet weak var animalTableView: UITableView!
///Set elements in cell
func tableView( _ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "appendicieslist"/*Identifier*/, for: indexPath)
cell.textLabel?.text = respiratory[indexPath.row]
// FONT STYLE
cell.textLabel?.textColor = UIColor.white
cell.detailTextLabel?.font = UIFont.boldSystemFont(ofSize: 30.0)
cell.textLabel?.textAlignment = .center
self.animalTableView.backgroundColor = UIColor.clear
cell.textLabel?.backgroundColor = UIColor.black
return cell
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return respiratory.count
}
Загвоздка в том, что вы используете табличное представление, содержащее один раздел с множеством строк (вместо множества разделов с одной строкой), но индекс работает по ссылке на разделы, а не на строки.
Из документации класса UITableView:
A table view can have an index that appears as a bar on the right hand side of the table (for example, "A" through "Z"). You can touch a particular label to jump to the target section.
После перехода к табличному представлению на основе разделов вы можете добиться более детального контроля над навигацией, предлагаемой индексом, путем реализации дополнительной функции tableView(_:sectionForSectionIndexTitle:at:)
.
Всегда остается возможность закодировать собственный настраиваемый индекс, который дублирует функциональность индекса UITableView для строк вместо разделов, но это может быть неэффективным или неприемлемым в зависимости от вашего варианта использования.
Что ж, единственный способ использовать индекс раздела, предлагаемый UITableView, - это реорганизовать представление таблицы в разделы. Вероятно, это самый простой способ сделать это, если вы не создаете относительно сложное приложение или не являетесь опытным разработчиком. Другие подходы потребуют от вас затрат времени и усилий на создание или включение настраиваемого индекса табличного представления, такого как MYTableViewIndex.
@ wcdean217 Как ты прошел?
Это хакерско, но я думаю, что вы могли бы добавить оператор defer в верхней части sectionForSectionIndexTitle
, который обрабатывал бы переход. Не уверен, что это будет хорошо смотреться в большом списке, но, возможно, стоит поэкспериментировать.
func tableView(_ tableView: UITableView, sectionForSectionIndexTitle title: String, at index: Int) -> Int {
defer {
// Handle transition to the correct row here
}
return 0 // Only one section so return it
}
Так что лучше всего для меня реорганизовать представление таблицы в разделы и строки для каждого раздела?