Swiftで遊ぼう! - 355 - カスタムTableViewでSearch Barを考える
Swiftで遊ぼう!の古い記事-> Life-LOG OtherSide
質問 : Swiftで遊ぼう! - 252 - FaceViewプロジェクト始動 - Swiftで遊ぼう! on Hatena
ここまでのTableViewの機能拡張は、デリゲーションメソッドの実装だけでできたようなものです。
しかし、今日から取り組むSearch Barの実装はもう少し複雑なステップを取ります。
長いリストから探しているデータがあるかどうか、スクロールさせて探すより検索ボックスを使って探す方がユーザーフレンドリーということで、iOSに用意されている標準検索バー(Search Bar)を使用します。
iOS標準のSearch Barは、UISearchControllerを使ってコントールされているので、UIAlertControllerと使い方は似ているような気はします。
Search Barにキーをタイプしていくと、テーブルリストの表示が徐々に絞られていきます。
タイプすると、検索範囲(スコープ)を設定するボタンも表示させれます。デモで使用しているテーブルリストはアルファベットの名前なんで、6文字より小さい名前のグループを「Short」、そして6文字以上の名前のグループを「Long」、すべてを「All」に設定します。
iOS8でサーチ機能を実装させるために次の3つのステップを実装していきます。
- 検索すべきデータ、この場合「名前」のリストになります。
- 検索結果を表示するためのresults view controllerがいります。このview controllerは一時的にデータを表示しているメインコントローラーと入れ替わります。このview controllerは結果をどんな形でも表示することができるですが、普通は、他のTableViewを使って結果を似たように表示させることで、元のテーブルにフィルターがかかったような印象を与えます。
- UISearchControllerがサーチバーの表示とresults view controllerに検索結果の表示をさせます。
まず検索すべきデータは、View Controllerの中にあります。名前のデーターを保持した辞書型のnamesとアレー型のkeysですが、これを結果表示をさせるビューコントローラー、results view controllerに手渡す必要があります。
ということでresults view controllerを用意します。
ストーリーボードから作らないで、コードで実装していくやり方なので、プロジェクトナビゲータのSectionsのフォルダーで右クリックして「New File...」を選びます。
いつもの手順でiOS SourceからCocoa Touch Classを選んで、suclassをUITableViewControllerにして名前を「SearchResultsController」にします。
このビューコントローラーに検索の結果を表示させる機能を実装していくのですが、いくつか新しいクラスやプロトコールが出てきます。その関係を理解する必要があるので明日から取り組みます。