Swiftで遊ぼう! - 359 - カスタムTableView、UISearchController
Swiftで遊ぼう!の古い記事-> Life-LOG OtherSide
UISearchControllerはベースビューのSearchBarの表示をコントロールします。ViewControllerにプロパティとして宣言して、viewDidLoad()メソッドの中でresults view controllerと関連づけをしていきます。
override func viewDidLoad() { super.viewDidLoad() tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: sectionsTableIdentifier) /* Identifierの情報を使ってTableViewCellを作ります。 registerClass()メソッドの引数に「UITableViewCell.self」 を使っていますが、「.self」がどういうこと分かりません。*/ let bundle = NSBundle.mainBundle() let path = bundle.pathForResource("sortednames", ofType: "plist") let namesDict = NSDictionary(contentsOfFile: path!) names = namesDict as! [String: [String]] keys = sorted(namesDict!.allKeys as! [String]) /* これはplistからデータを読み込むステップです。 Swiftの辞書型は外部からデータを読み込むメソッドを 持っていないので、NSDictionaryのメソッドを使用 しなければなりません。後でキャスティングする 必要もあります。 じゃあ裏を返せば、この方法はアウトオブデートです。 Swift世代のプログラマには必要無い方法ってことでしょう。*/ let resultsController = SearchResultsController() resultsController.names = names resultsController.keys = keys searchController = UISearchController(searchResultsController: resultsController) /*カスタムに作った結果を表示させるresultsControllerに メインビューで保持しているnamesとkeysのデータを渡します。 そして、そのViewControllerを使って、searchControllerを 生成させます。 このステップを通してViewControllerにSearchControllerが 保持されました。まだ表示はされません。*/ let searchBar = searchController.searchBar searchBar.scopeButtonTitles = ["All", "Short", "Long"] searchBar.placeholder = "Enter a search term" searchBar.sizeToFit() tableView.tableHeaderView = searchBar searchController.searchResultsUpdater = resultsController /*searchBarのプロパティに値をも持たせてから tableViewのヘッダービューに登録することで表示されます。 そして、最後のsearchResultsUpdaterプロペティは UISearchResultsUpdatingプロトコールのことで、 resultsControllerで準拠したメソッドが呼ばれると いうことでしょう。何となく理解できるレベルです。*/
今日はここまで。