HMDT(白) 8章を読んでいて出てきたサンプルアプリ 「PropertyListViewer」を作った。
そして、その延長でiPhone用「PropertyListViewerもどき」を作った。
「PropertyListViewer」はテキストのプロパティリストファイルを読み込んで、階層構造をoutline viewに展開するアプリ。上半分がoutline View で下半分はテキストファイルをそのまま出力するtext view。プロパティリストのデータ構造をoutline viewに展開するために内部構造に変換し、それを表示する。outline view はデータ構造に親子関係があるときの表示に便利なビューで折りたたみできる。
view自体はデータをもたず、表示のタイミングでviewがdataSourceへデータを問い合わせる。dataSource は普通はコントローラで実装される。outline view なら NSOutlineViewDataSource プロトコル、table view は NSTableDataSource、iPhoneのtableならUITableViewDataSource。
NSOutlineViewDataSourceの必須メソッドは4つ。
- outlineView:child:ofItem:
- outlineView:isItemExpandable:,
- outlineView:numberOfChildrenOfItem:
- outlineView:objectValueForTableColumn:byItem:
iPhoneのUIKitにはoutline viewはないので、table viewを使ってみる。outline view のような親子関係表現ができないし、UIKitの table view は1カラムの制約がある。しかし、あくまでも1-viewでドリルダウンしたりはしないので親子関係については、孫まで表示(親=root、子=一階層目、孫=二階層目)。それ以上は表示できない仕様です。
スクリーンキャプチャで表示しているのは、UIKit.frameworkに含まれるiPhone のソフトウェアキーボードで利用される文言for日本語のプロパティリスト(keyboard-ja.plist)。
はまったこと
学んだこと
- NSDictionaryの使い方
- outline viewとtable view 全般、概要
ところで、Xcodeのドキュメントビューアーは別アプリとして実現してほしいな。なんだか使いにくい。
そしてiPhoneでSDKDoc見れるビューアーがあるとうれしいかもと思う、今日この頃。