如何使用Navigaitonbar

时间:2018-03-14 04:10:38

标签: ios swift uisearchcontroller uisearchdisplaycontroller

我已经成功地让UISearchController在一个新项目中工作,但是当我试图在我自己的项目中做同样的事情时,它的行为却不同。

这是我为了让它发挥作用而做的。

故事板:

This is my storyboard

这是我的视图控制器的代码:

class ViewController: UIViewController, UISearchControllerDelegate, UISearchResultsUpdating, UISearchBarDelegate {

    var searchController : UISearchController!

    override func viewDidLoad() {
        super.viewDidLoad()

        let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let modalVC =  mainStoryboard.instantiateViewController(withIdentifier: "SearchTableViewController_SBID")
        self.searchController = UISearchController(searchResultsController:  modalVC)

        self.searchController.searchResultsUpdater = self
        self.searchController.delegate = self
        self.searchController.searchBar.delegate = self

        self.searchController.hidesNavigationBarDuringPresentation = false
        self.searchController.dimsBackgroundDuringPresentation = true

        self.navigationItem.titleView = searchController.searchBar

        self.definesPresentationContext = true
    }

    func updateSearchResults(for searchController: UISearchController) {

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

我得到的结果是,当我点击搜索栏时,背景将变暗,当我开始输入时,桌面视图控制器将可见,搜索栏是否仍然可以在导航栏中看到tableview控制器。

然而,当我尝试在我的项目中实现相同的功能时,当我开始在搜索栏上输入时,表视图控制器将填满整个屏幕,导航栏不可见。

这是我项目的故事板:

Storyboard for my project

请注意,两个项目都相似,但其中一个是Navigation Controller -> Tab Bar View Controller,当我在搜索栏上输入时,它不会显示导航栏。

如何让导航栏显示在项目Navigation Controller -> Tab Bar View Controller中?

这是2个项目的样子:

No navigation bar

Working project, visible bar

1 个答案:

答案 0 :(得分:1)

故事板设置

enter image description here 两个视图控制器的编码

class ViewController1: UIViewController,UISearchBarDelegate {
    @IBOutlet weak var lbl1: UILabel!
    var searchBar:UISearchBar? = nil
    override func viewDidLoad() {
        super.viewDidLoad()

        //Code to identify the searchbar
        for view in (self.tabBarController?.navigationItem.titleView?.subviews)!
        {
            if view.isKind(of: UISearchBar.self)
            {
                searchBar = (view as! UISearchBar);
            }
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        //Assign Delegate and blank the search bar text 
        searchBar?.text = ""
        searchBar?.delegate = self

    }
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        lbl1.text = "Tab 1 : \(searchText)"

    }

}
class ViewController2: UIViewController,UISearchBarDelegate {
    @IBOutlet weak var lbl1: UILabel!
    var searchBar:UISearchBar? = nil
    override func viewDidLoad() {
        super.viewDidLoad()

        //Code to identify the searchbar
        for view in (self.tabBarController?.navigationItem.titleView?.subviews)!
        {
            if view.isKind(of: UISearchBar.self)
            {
                searchBar = (view as! UISearchBar);
            }
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        searchBar?.text = ""
        searchBar?.delegate = self
    }
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        lbl1.text = "Tab 2 : \(searchText)"

    }

}

<强>结果

enter image description here