搜索栏返回按钮

Posted

技术标签:

【中文标题】搜索栏返回按钮【英文标题】:Search Bar return Button 【发布时间】:2016-01-20 11:09:50 【问题描述】:

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

【问题讨论】:

【参考方案1】:

我不知道如何将用户直接发送到搜索栏,但总有其他方法可以做,你可以做的是:重新加载故事板,然后它会再次显示初始搜索栏状态。看看这个有趣的帖子:How do I perform an auto-segue in Xcode 6 using Swift? 也许你可以去另一个 VC 并立即返回一个简单的动画,这样用户就不会注意到这个骗子。 :)

【讨论】:

我没想到这是个好主意....我去看看,谢谢 Eddie....... 效果很好,我可以设置一个图像来做出不同的东西。谢谢【参考方案2】:

是的,you can add a UIBarButtonItem to your navigation bar 你所做的操作将在哪里scroll the table back to the top。

【讨论】:

@Michael Dautermann 我用一些代码编辑了我的问题。它与您提供的代码链接不同,对我有帮助吗?谢谢【参考方案3】:

只需将代码从 tableView.tableHeaderView = searchController.searchBar 替换为 navigationItem.titleView = searchController.searchBar 即可在 NavigationBar 上显示 searchBar。

但是当您选择 searchBar 时,它会向上移动并且可能在屏幕上不可见,因此您可以使用UISearchBar 而不是UISearchController。有关更多信息,请查看这些thread。

【讨论】:

是的,搜索栏消失了,我想找回它但无法。你是什​​么意思改变 UISearchBar.... 你能给我这条线吗?谢谢:) 你查看我分享的链接了吗? @RamkrishnaSharma 是的,我做到了,但它不是 Swift。你知道我怎样才能使用上面的代码找回 searchBar 吗? @Manolo :很快,请再次检查。关于取回 searchBar,您是在实现 UISearchBar 还是 UISearchController 请告诉我,以便我可以帮助您。 @Manolo 你能去这个聊天室吗? chat.***.com/rooms/102335/searchbarproblem【参考方案4】:

这并不完全是您问题的答案,但仍然是您快速返回表格视图顶部问题的解决方案。您可以覆盖表视图的scrollsToTop: -property 以返回YES。通过这样做,您将允许用户通过简单地点击状态栏来跳转到表格的顶部。这是许多常用应用程序的标准行为,例如通讯录、邮件、Safari 和照片。

请注意,屏幕上只有一个滚动视图/表格视图/集合视图可能会返回YES 以实现此行为。在多个滚动视图的情况下,您可以选择实现UIScrollViewDelegate -protocol's

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView

回调并动态检查给定的滚动视图是否应该响应点击。

虽然这是 Objective-C 的方式,但我想你应该能够将这个概念转移到 Swift 上。

这种方法有两个优点:

    您不会弄乱您的导航栏。苹果ios Human Interface Guidelines明确建议

    避免在导航栏上挤满额外的控件,即使它看起来有足够的空间。一般来说,导航栏不应包含视图的当前标题、后退按钮和一个管理视图内容的控件。

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

【讨论】:

以上是关于搜索栏返回按钮的主要内容,如果未能解决你的问题,请参考以下文章

iOS 导航栏-返回按钮-自定义

如何在 SafariViewController 中隐藏完成按钮和搜索栏

Flutter——两种监听导航栏返回按钮的方法

iOS 调整导航栏返回按钮的位置

Swift - 修改导航栏“返回”按钮文字,图标

iOS 调整导航栏返回按钮的位置