IOS swift如何让我的SubView显示在我的SearchBar

时间:2016-11-11 18:46:44

标签: ios swift uitableview uisearchbar addsubview

我有一个UISearchBar嵌入在一个表单中,所以我想要做的是一旦有人点击SearchBar我想要一个TableView弹出作为一个子视图。我有正确的工作,但我希望SubView出现在SearchBar下,以便用户可以继续搜索,我的SubView接管整个页面。以下是我尝试使用该功能的方法: Trulia App 。  现在注意带有相应View的searchBar,如果单击SearchBar,则SearchBar下方会出现一个subView。如前所述,除了subView接管整个页面并且没有出现在SearchBar下面之外,一切正常。这是我的代码,第三张图片是我的storyBoard,这是我的代码

       class RegistrationViewController: UIViewController,UISearchBarDelegate {

    @IBOutlet weak var Location: UISearchBar!
       func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {
        searchBar.setShowsCancelButton(false, animated: true)

        let Popup = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "zip_searches") as! ExampleTableViewController
        self.addChildViewController(Popup)
        Popup.view.frame = self.view.frame
        self.view.addSubview(Popup.view)
        Popup.didMove(toParentViewController: self)
        return true
    }
}

[Main Page[1]

SubView

enter image description here

2 个答案:

答案 0 :(得分:1)

iOS为此提供了UISearchController。下面是将搜索栏添加并约束到故事板中现有容器视图的代码,以及设置tableViewController以显示用户何时开始输入的内容。

    locationSearchResultTableViewController = storyboard?.instantiateViewController(withIdentifier: String(describing: LocationSearchResultTableViewController.self)) as! LocationSearchResultTableViewController
    locationSearchResultTableViewController.delegate = self
    searchController = UISearchController(searchResultsController: locationSearchResultTableViewController)
    searchController.searchResultsUpdater = locationSearchResultTableViewController
    searchController.dimsBackgroundDuringPresentation = false
    searchController.definesPresentationContext = true
    searchContainer.addSubview(searchController.searchBar)
    searchController.searchBar.translatesAutoresizingMaskIntoConstraints = false
    let attributes: [NSLayoutAttribute] = [.top, .bottom, .left, .right]
    attributes.forEach { NSLayoutConstraint(item: self.searchController.searchBar, attribute: $0, relatedBy: .equal, toItem: searchController.searchBar.superview, attribute: $0, multiplier: 1, constant: 0)}

答案 1 :(得分:-1)

我找到了解决问题的简单方法。您只需在顶部有一个SearchBar,然后创建第二个UIView并将其放在SearchBar下面。然后连接新的UIView,例如

@IBOutlet weak var view2: UIView!

然后当谈到框架部分时,你只需要这样做

Popup.view.frame = self.view2.frame

就是当你点击SearchBar时,View2将作为弹出窗口并覆盖searchBar下的所有内容。