【问题标题】:hide searchController searchBar when cancel button cliked单击取消按钮时隐藏searchController searchBar
【发布时间】:2017-12-14 07:23:26
【问题描述】:

我已经在带有表格视图和搜索控制器的 viewController 中实现了一个搜索控制器,当点击搜索按钮时显示搜索栏,搜索按钮是 UIBarButtonItem 并且搜索栏显示在导航控制器中,但我想要为了在点击取消按钮时消失,我尝试使用 serarchBarDelegate 协议,但点击这里的代码没有任何反应

    class NewsTVController: UIViewController, UITableViewDataSource, UITableViewDelegate,UISearchResultsUpdating,UISearchBarDelegate{
let searchController = UISearchController(searchResultsController: nil)
    override func viewDidLoad() {
        super.viewDidLoad()
        searchController.searchResultsUpdater = self
        definesPresentationContext = true
        searchController.dimsBackgroundDuringPresentation = false
        searchController.hidesNavigationBarDuringPresentation = true

        self.searchController.hidesNavigationBarDuringPresentation = false

        loadNews()
    }


@IBAction func searchButtonTaped(sender:UIBarButtonItem){
        print("tap inside")
        self.navigationItem.titleView = searchController.searchBar
        //self.navigationItem.rightBarButtonItem?.action = #selector(hideSearchBar(:))
       // searchController.searchBar.touchesCancelled(UITouch, with: .touchUpInside){

        //}
        //self.navigationItem.rightBarButtonItem.
    }
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
        hideSearchBar()
    }
    func hideSearchBar() {
        print("hay que escpder")
        //navigationItem.setLeftBarButtonItem(searchBarButtonItem, animated: true)
        //logoImageView.alpha = 0
        UIView.animate(withDuration: 0.3, animations: {
            self.navigationItem.titleView = nil// = self.logoImageView
            self.navigationItem.title = "Eventos"
            //self.logoImageView.alpha = 1
        }, completion: { finished in

        })
    }  
}

这里是带有搜索按钮和搜索栏的导航控制器的图片

我想要的是,当点击取消按钮时,导航栏保持在第一张图片中,没有搜索栏。 还有一些提示,当搜索栏出现时,有一种方法可以隐藏后退按钮和搜索按钮。

【问题讨论】:

    标签: ios swift uinavigationcontroller uisearchcontroller


    【解决方案1】:

    因为我找不到实现这一点的方法,所以我找到了这个解决方案

    @IBAction func searchButtonTaped(sender:UIBarButtonItem){
            print("tap inside")
            self.navigationItem.titleView = searchController.searchBar
            searchController.searchBar.setShowsCancelButton(false, animated: false)
            self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Cancelar", style: .plain, target: self, action: #selector(hideSearchBar(sender:)))
            //self.searchIcon.is
            //self.navigationItem.rightBarButtonItem?.action = #selector(hideSearchBar(:))
           // searchController.searchBar.touchesCancelled(UITouch, with: .touchUpInside){
    
            //}
            //self.navigationItem.rightBarButtonItem.
        }
    func hideSearchBar(sender:UIBarButtonItem) {
            print("hay que escpder")
            self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.search, target: self, action: #selector(searchButtonTaped(sender:)))
            //logoImageView.alpha = 0
            UIView.animate(withDuration: 0.3, animations: {
                self.navigationItem.titleView = nil// = self.logoImageView
    
                self.navigationItem.title = "Noticias"
                //self.logoImageView.alpha = 1
            }, completion: { finished in
    
            })
        }
    

    搜索栏现在从导航控制器中消失,搜索按钮可以正常工作,因为它链接到界面生成器中的 searchButtonTaped

    【讨论】:

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