読者です 読者をやめる 読者になる 読者になる

swiftのUISearchBarでキャンセルボタンの表示・非表示を切り替える方法

はじめに

UISearchBarは検索フォーム用のテキストフィールドで、キーボードも検索用のものが表示されるのでとても便利だなぁと思います。
今回はすこしだけいじって、以下を実装しました
・通常ではキャンセルボタンを非表示
・編集中のみキャンセルボタンを表示
・キャンセルボタンをおすと編集中の状態を解除

イメージ的にはこんなかんじです

通常
f:id:yoppy0066:20150621184941p:plain

編集中
f:id:yoppy0066:20150621184958p:plain

実装方法

class ViewController: UIViewController, UISearchBarDelegate {

    var searchBar: UISearchBar!

    override func viewDidLoad() {

        ・・・

        searchBar = UISearchBar()
        searchBar.frame = CGRectMake(・・・)
        searchBar.placeholder = "検索キーワードを入力してください"
        searchBar.delegate = self
        self.view.addSubview(searchBar)
    }

    // キーボードが表示を監視
    override func viewWillAppear(animated: Bool) {
        let notificationCenter = NSNotificationCenter.defaultCenter()
        notificationCenter.addObserver(self, selector: "handleKeyboardWillShowNotification:", name: UIKeyboardWillShowNotification, object: nil)
    }

    // キーボードが表示されるときにキャンセルボタンを有効に
    func handleKeyboardWillShowNotification(notification: NSNotification) {
        searchBar.showsCancelButton = true
    }

    // キャンセルボタンが押されたらキャンセルボタンを無効にしてフォーカスをはずす
    func searchBarCancelButtonClicked(searchBar: UISearchBar) {
        searchBar.showsCancelButton = false
        searchBar.resignFirstResponder()
    }
}

以上です