条件覆盖函数 - swift

时间:2015-02-20 18:29:56

标签: swift

我正在使用UILocalizedIndexedCollat​​ion和UISearchDisplayController,我喜欢实现一个条件,如果用户没有使用SerachBar,它只应用覆盖功能。

以下是覆盖func tableView以显示排序规则的代码,但如果用户位于搜索栏中,如何绕过此代码?

override func tableView(tableView: UITableView, sectionForSectionIndexTitle title: String, atIndex index: Int) -> Int {
    return self.collation.sectionForSectionIndexTitleAtIndex(index)
}

override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String {

    if !self.sections[section].users.isEmpty {
        return self.collation.sectionTitles[section] as String
    }
    return ""
}

displayed to the right of the `UITableView` */
override func sectionIndexTitlesForTableView(tableView: UITableView) -> [AnyObject] {
    return self.collation.sectionIndexTitles
}

2 个答案:

答案 0 :(得分:1)

您无法有条件地覆盖方法,正常方法是覆盖方法并在不需要覆盖时调用super:

override func tableView(tableView: UITableView, sectionForSectionIndexTitle title: String, atIndex index: Int) -> Int {
    if showingSearch {
        return self.collation.sectionForSectionIndexTitleAtIndex(index)
    }
    else {
        return super.tableView(tableView, sectionForSectionIndexTitle:title atIndex:Index)
    }
}

答案 1 :(得分:0)

我的代码看起来像这样:

/* section headers appear above each `UITableView` section */
    override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String {
    // do not display empty `Section`s
    if self.sections[section].users.isEmpty || tableView == self.searchDisplayController!.searchResultsTableView {
        return ""
    } else {
        return self.collation.sectionTitles[section] as String
    }
}

/* section index titles displayed to the right of the `UITableView` */
override func sectionIndexTitlesForTableView(tableView: UITableView) -> [AnyObject] {
    if tableView == self.searchDisplayController!.searchResultsTableView {
        return tableView.visibleCells()
    } else {
        return self.collation.sectionIndexTitles
    }
}