- 更新日: 2015年6月17日
- Swift & iOS
UISearchBarフォーカス時にキーボードを非表示にした後にsegueで画面遷移
先日のエントリー UISearchBarをNavigation Barに表示(Swift版) | EasyRamble のちょっとした続きです。UISearchBar の文字入力フィールドにフォーカスすると、iOS のデフォルト挙動では自動的にソフトウェアキーボードが表示されます。
そして、UISearchBar フォーカス時のキーボードが表示された状態で、UITableView などから segue で画面遷移すると、画面遷移した後にキーボードが非表示にされて、ちょっと目障りな動作になります。これを、キーボードを非表示にした後に、画面遷移するようにしたかった。
prepareForSegue() メソッドで UISearchBar を resignFirstResponder() する
いくつか試行錯誤して、最初 UITapGestureRecognizer を使ってタップ時のアクションでキーボードを非表示にしようとしたところ、segue での画面遷移が無効になって失敗。なので、UITapGestureRecognizer は使わないことにした。
代わりに、以下のように prepareForSegue() の中で、UISearchBar を resignFirstResponder() すると上手く動作しました。
SearchViewController.swift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
class SearchViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate { var searchBar: UISearchBar! override func viewDidLoad() { super.viewDidLoad() setupSearchBar() // ... } // ... // MARK: - Navigation override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "showWordDetail" { searchBar.resignFirstResponder() let destController = segue.destinationViewController as! DetailViewController // ... } } // ... } |
prepareForSegue() というメソッド名なので、segue での画面遷移の前準備として色々と前処理を行いたい場合は、このメソッド内に実装すれば良い感じでしょうかね。
- Swift & iOS の関連記事
- WKWebView/UIWebViewでウェブページが真っ白
- Unityのインストールと初期設定
- WKWebView/UIWebViewでNavigation Barの下にウェブページが隠れるのを回避
- SwiftでArray(配列)などをシャッフル
- Navigation Controllerで画面遷移させるSwiftコード
- Swiftでタップ/スワイプのイベント処理実装・UITapGestureRecognizerとUISwipeGestureRecognizer
- UIPageViewController画面下部のUIPageControlを非表示にする
- Swiftのバージョン確認・REPL実行
- Xcode7.0アップデートで遭遇した課題2つ
- 正規のXcodeかどうかチェック(XcodeGhostマルウェア騒動)
Leave Your Message!