我在tableview中有一个searchBar,在.csv文件(coredata)中搜索结果。
该列表非常庞大,因此用户必须在第一次搜索后多次向上滚动才能到达搜索栏,或者选择" A"索引栏中的字母。
当用户想要回到列表的开头时,有没有办法在NavigationBar中添加一个按钮来显示searchBar?提前谢谢。
searchController = UISearchController(searchResultsController: nil)
tableView.tableHeaderView = searchController.searchBar
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return sectionTitles[section]
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
//assume a single section after a search
return (searchController.active) ? 1 : sectionTitles.count
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searchController.active {
return searchResults.count
} else {
// Return the number of rows in the section.
let wordKey = sectionTitles[section]
if let items = cockpitDict[wordKey] {
return items.count
}
return 0
}
}
答案 0 :(得分:1)
答案 1 :(得分:1)
我不知道如何将用户直接发送到搜索栏,但总有其他方法可以做,您可以做的是:重新加载故事板,然后它会再次显示搜索栏最初的状态。看一下这篇有趣的帖子:How do I perform an auto-segue in Xcode 6 using Swift?也许你可以去另一个VC并立即返回一个简单的动画,这样用户就不会注意到这个tricker。 :)
答案 2 :(得分:0)
只需将代码从tableView.tableHeaderView = searchController.searchBar
替换为显示NavigationBar上的searchBar的navigationItem.titleView = searchController.searchBar
。
但是当您选择搜索栏然后它会向上移动并且可能在屏幕上看不到,因此您可以使用UISearchBar
代替UISearchController
。有关详细信息,请查看这些thread。
答案 3 :(得分:0)
这不是您问题的答案,但仍然可以解决您快速返回到表格视图顶部的问题。您可以覆盖表格视图scrollsToTop:
-property以返回YES
。通过这样做,您只需点击状态栏,即可让用户跳到表格的顶部。这是许多股票应用程序中的标准行为,例如“联系人”,“邮件”,“Safari”和“照片”。
请注意,屏幕上只有一个滚动视图/表视图/集合视图可能会返回YES
以实现此行为。在多个滚动视图的情况下,您也可以实现UIScrollViewDelegate
- 协议
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
回调并动态检查,如果给定的滚动视图应该响应点击。
虽然这是Objective-C -way,但我猜你应该能够将这个概念转移到Swift。
这种方法有两个好处:
您不会弄乱导航栏。苹果iOS Human Interface Guidelines明确建议
避免使用其他控件拥挤导航栏,即使它看起来有足够的空间。一般情况下,导航栏应该只包含视图的当前标题,后退按钮和一个管理视图内容的控件。
您将与操作系统保持一致'标准行为。