搜索栏返回按钮

时间:2016-01-20 11:09:51

标签: core-data swift2 xcode7 uisearchbar

我在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
        }
    }

4 个答案:

答案 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。

这种方法有两个好处:

  1. 您不会弄乱导航栏。苹果iOS Human Interface Guidelines明确建议

      

    避免使用其他控件拥挤导航栏,即使它看起来有足够的空间。一般情况下,导航栏应该只包含视图的当前标题,后退按钮和一个管理视图内容的控件。

  2. 您将与操作系统保持一致'标准行为。