ナビゲーションバーに UISearchBar を ScopeBar 付きで表示


ナビゲーションバーに UISearchBar を載せ、編集中のみ ScopeBar を表示する。

標準 編集中

コードサンプルは以下の通り。高さの調整はもっとマシな方法があるかもしれない。

    override func viewDidLoad() {
        super.viewDidLoad()

        let searchBar = UISearchBar()
        searchBar.delegate = self
        searchBar.scopeBarBackgroundImage = UIImage() // 空の画像をセットしないと親 View に背景色がつく
        self.navigationItem.titleView = searchBar
    }

    // MARK: - UISearchBarDelegate

    func searchBarShouldBeginEditing(searchBar: UISearchBar) -> Bool {
        searchBar.showsCancelButton = true
        searchBar.scopeButtonTitles = ["A", "B"]
        searchBar.showsScopeBar = true
        self.navigationController?.navigationBar.frame.size.height = 84
        return true
    }

    func searchBarShouldEndEditing(searchBar: UISearchBar) -> Bool {
        searchBar.showsCancelButton = false
        searchBar.scopeButtonTitles = [] // 空にしないと showsScopeBar = false にしても表示される
        searchBar.showsScopeBar = false
        self.navigationController?.navigationBar.frame.size.height = 44
        return true
    }

    func searchBarCancelButtonClicked(searchBar: UISearchBar) {
        searchBar.text = ""
        searchBar.resignFirstResponder()
    }