簡體   English   中英

單擊取消按鈕時隱藏searchController searchBar

[英]hide searchController searchBar when cancel button cliked

我已經在帶有表視圖的viewController中實現了一個搜索控制器以及一個搜索控制器,當粘貼了搜索按鈕時顯示了搜索欄,搜索按鈕是一個UIBarButtonItem,而searchBar顯示在導航控制器中,但我想使其消失點擊取消按鈕時,我嘗試使用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

        })
    }  
}

這是帶有搜索按鈕和搜索欄的導航控制器的圖片 在此處輸入圖片說明

我想要的是,當點擊取消按鈕時,導航欄保持如上圖所示,沒有搜索欄。 還有一些技巧,可以在搜索欄出現時隱藏后退按鈕和搜索按鈕。

因為我找不到達到這個目的的方法,所以我找到了這個解決方案

@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

        })
    }

並從導航控制器中消失了搜索欄,並且由於鏈接到Interface Builder中的searchButtonTaped ,因此搜索按鈕功能正常

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM