如何将故事板UISearchBar连接到以编程方式创建的UISearchController?

ggw*_*ean 9 xcode uitableview ios swift

我以前在我searchController.searchBar的标题视图中有一个,UITableView但我想添加按钮来更改显示的数组.现在我已经UISearchBar在我的故事板中添加了一个我试图弄清楚如何将它连接到我的UISearchController所以我可以正确地更新结果.然而,即使在最新的XCode中,我们仍然UIDisplayController在IB中.

我认为有两种方法可以解决这个问题,或者有一种方法可以连接它们,我不知道它或者我只是将searchBar原生用于searchController并将其框架移动到我想要的位置.由于AutoLayout对尺寸的好处,我对尝试后者犹豫不决.

Jos*_*ann 1

我总是在界面生成器文件中放置一个 44 点高的占位符视图。然后,您可以将 SearchController.view 添加为该容器视图的子视图。

    @IBOutlet weak var searchContainerView: UIView!

    fileprivate lazy var searchController: UISearchController = {
        let contactSearchViewController = self.storyboard?.instantiateViewController(withIdentifier: String(describing: ContactSearchViewController.self)) as! ContactSearchViewController
        contactSearchViewController.delegate = self
        contactSearchViewController.datasource = self
        let searchController = UISearchController(searchResultsController: contactSearchViewController)
        searchController.searchResultsUpdater = contactSearchViewController
        searchController.dimsBackgroundDuringPresentation = false
        searchController.definesPresentationContext = true
        return searchController
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        searchContainerView.addSubview(searchController.searchBar)
        let attributes: [NSLayoutAttribute] = [.top, .bottom, . left, .right]
        NSLayoutConstraint.activate(attributes.map{NSLayoutConstraint(item: self.searchController.searchBar, attribute: $0, relatedBy: .equal, toItem: self.searchContainerView, attribute: $0, multiplier: 1, constant: 0)})
    }
Run Code Online (Sandbox Code Playgroud)