sectionForSectionIndexTitle检索上一节

时间:2016-08-19 08:22:37

标签: ios swift uitableview

我有一个带有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

我试图复制联系人应用程序中的行为:

  • 如果用户点击了索引标题" D"如果B部分中至少有一个联系人,则滚动到此部分。
  • 否则,请滚动到上一部分。 (在此示例中,如果B和C字母没有联系人,则滚动到A)

我已经被困了好几个小时我还不知道如何运用这个逻辑。我想过使用递归函数,但我没有设法将其解除。有人对如何实现这一目标有任何指导意义吗?

感谢。

1 个答案:

答案 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!
}