我有一个带有sectionIndexTitles的UITableView。这是我的数据来源:
let sSectionTitles = ["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","#"]
var sectionTitles = [String]()
func sectionIndexTitlesForTableView(tableView: UITableView) -> [String]? {
return sSectionTitles
}
func tableView(tableView: UITableView, sectionForSectionIndexTitle title: String, atIndex index: Int) -> Int {
var section = 0
if let selectedSection = sectionTitles.indexOf(title) {
section = selectedSection
} else {
section = index
}
return section
}
变量sectionTitles
是与sSectionTitles
类似的数组,除了它只包含有效的段索引。例如,如果我没有以字母D开头的姓名联系,那么" D"不会进入sectionTitles
。
我试图复制联系人应用程序中的行为:
我已经被困了好几个小时我还不知道如何运用这个逻辑。我想过使用递归函数,但我没有设法将其解除。有人对如何实现这一目标有任何指导意义吗?
感谢。
答案 0 :(得分:1)
我认为你可以通过递归来做到这一点。使用另一个辅助函数来检索适当的索引并从tableview数据源函数调用它。例如,
func tableView(tableView: UITableView, sectionForSectionIndexTitle title: String, atIndex index: Int) -> Int {
var section = getSectionIndex(title)
return section
}
//recursive function to get section index
func getSectionIndex(title: String) -> Int {
let tmpIndex = sectionTitles.indexOf(title)
let mainIndex = sSectionTitles.indexOf(title)
if mainIndex == 0 {
return 0
}
if tmpIndex == nil {
let newTitle = sSectionTitles[mainIndex!-1]
return getSectionIndex(newTitle)
}
return tmpIndex!
}