Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

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で準拠したメソッドが呼ばれると
いうことでしょう。何となく理解できるレベルです。*/

今日はここまで。