按下字母时iOS搜索栏关闭

Posted

技术标签:

【中文标题】按下字母时iOS搜索栏关闭【英文标题】:iOS Search bar closes when letter pressed 【发布时间】:2016-12-17 12:40:34 【问题描述】:

我在 swift 3 中的搜索栏有这个奇怪的问题。

所以我希望将搜索栏粘贴到表格视图的顶部(但不要将它放在情节提要中) 我有以下代码。

    let searchController = UISearchController(searchResultsController: nil)

override func viewDidLoad() 
            super.viewDidLoad()



            searchController.searchResultsUpdater = self
            searchController.dimsBackgroundDuringPresentation = false
            definesPresentationContext = true
            searchController.searchBar.placeholder = "Search for Event Name or Category"
    


        func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 
            return self.searchController.searchBar
        

        func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat 
            return searchController.searchBar.frame.height
        

所以当我上下滚动表格视图时,搜索栏确实保持在顶部。 当我按下搜索栏输入文本时,它会显示键盘和取消按钮。

如果我按下取消按钮,键盘就会消失,这是正常的。

但是如果我按键盘上的某些东西(让我们说字母A) 它过滤表格视图并关闭键盘。它也不允许我按下取消或 (x) 按钮。 知道为什么吗?

附:在模拟器中工作得很好!但是在我的 iPhone SE 上是在做上面的事情!

【问题讨论】:

为什么不将搜索栏添加为 UITableviewHeader? @Dev_Tandel 因为当我向下滚动时它不会粘在 tableview 的顶部 【参考方案1】:

删除标题的两个函数并将这些行添加到行上方的 viewDidLoad 中。

 searchController.hidesNavigationBarDuringPresentation = false
        let tableHeaderView: UIView = UIView.init(frame: searchController.searchBar.frame)
        tableHeaderView.addSubview(searchController.searchBar)
        self.locationTable.tableHeaderView = tableHeaderView

然后把这个函数也放进去:

func scrollViewDidScroll(_ scrollView: UIScrollView) 
        let searchBar:UISearchBar = searchController.searchBar
        var searchBarFrame:CGRect = searchBar.frame
        if searchController.isActive 

            searchBarFrame.origin.y = 0
        
        else 
            searchBarFrame.origin.y = max(0, scrollView.contentOffset.y + scrollView.contentInset.top)

        
        searchController.searchBar.frame = searchBarFrame
    

现在我相信你会得到你想要的结果。

希望对你有帮助

【讨论】:

以上是关于按下字母时iOS搜索栏关闭的主要内容,如果未能解决你的问题,请参考以下文章

每次点击取消按钮时,搜索栏都会向下跳一排

如果找到搜索栏文本,则更改表格视图的字母颜色

HTML & JS 问题:如果按下数字、符号或字母键,如何将焦点放在 HTML 输入元素上[关闭]

向使用字母部分的 iPhone 应用程序添加搜索栏?

按下标签栏项目时如何关闭视图?

当我在 Swift 上按下搜索栏时如何使键盘消失?