【问题标题】:Search bar cancel button delegate not called未调用搜索栏取消按钮委托
【发布时间】:2018-01-04 07:09:22
【问题描述】:

我在导航控制器中实现了一个搜索栏,它工作正常,但没有调用取消按钮点击委托方法。请帮忙:

func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
//This function is not being called 
}

let searchBarCnt = UISearchController(searchResultsController: nil)
navigationItem.searchController = searchBarCnt
navigationItem.hidesSearchBarWhenScrolling = true
self.navigationController?.view.backgroundColor = UIColor.white
searchBarCnt.delegate = self
searchBarCnt.searchBar.delegate = self

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    没有调用函数委托,因为您缺少definesPresentationContext

    确定应该在哪个父视图控制器的视图上呈现类型的演示文稿 UIModalPresentationCurrentContext。如果没有祖先视图控制器设置此标志,则演示者 将是根视图控制器。

    您可以通过这种方式启用此类标志:

    import UIKit
    
    class ViewController: UIViewController, UISearchBarDelegate {
        override func viewDidLoad() {
            super.viewDidLoad()
    
            self.navigationItem.searchController = UISearchController(searchResultsController: nil)
            self.navigationItem.searchController?.searchBar.delegate = self
            self.definesPresentationContext = true
        }
    
        func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
            print("searchBarCancelButtonClicked")
        }
    }
    

    注意: 没有definesPresentationContext,您并没有真正触摸取消按钮(当您尝试触摸它时),您只是忽略了上下文(您可能会注意到背景焦点中的“无声”故障),例如 弹出框正在关闭。

    【讨论】:

    • 注意self.definesPresentationContext = true必须在设置searchBardelegate之后再设置
    【解决方案2】:

    当您单击出现在搜索栏旁边的“取消”按钮时,将不会调用委托方法。

    尝试点击键盘上的搜索按钮并检查取消按钮委托方法是否被调用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多