代码之家  ›  专栏  ›  技术社区  ›  user3051673

如何将搜索栏与Navigaitonbar一起使用

  •  0
  • user3051673  · 技术社区  · 7 年前

    我已经成功地让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控制器将可见,搜索栏是否仍在tableview控制器的导航栏中可见。

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

    这是我的项目的情节提要:

    Storyboard for my project

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

    如何在项目中显示导航栏 导航控制器->选项卡栏视图控制器 ?

    这是两个项目的情况:

    No navigation bar

    Working project, visible bar

    1 回复  |  直到 7 年前
        1
  •  1
  •   Jaydeep Vyas    7 年前

    情节提要设置

    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