2008年1月6日日曜日

NSSearchFieldってどうやって使うのか?

追記
メモ:SearchFieldの履歴についてだって.
Cider House » NSSearchFieldとIB
http://ciderhouse.ivory.ne.jp/wp/mac/cocoa/cocoa3/
これってセレクターを出せるってだけか…セレクタのItemや動作等については自分で実装するわけね.

Search Fields
http://developer.apple.com/documentation/Cocoa/Conceptual/SearchFields/SearchFields.pdf

p.13のConfiguring a Menu Templateの項参照.
Listing 1が実装部.(全部が全部実装する必要はないみたい.)



という疑問でCore Dataのモデルが自動生成したインターフェイスを調べてみた.
自動生成についてはこちら.
CoreData:データモデルをIBにd&dすると自動的にUIができる
http://edotprintstacktrace.blogspot.com/2007/10/coredataibd.html


秘密(w)はNSSearchFieldのBindingだった.やり方としてはこんな感じ.

・Searchの項,PredicateのBind to:にチェックをいれる.
・テーブルのControllerをセレクタから選ぶ.
Predicate Formatに評価式を書く.
 ・(Foo.description contains[c] $value) // FooはNSNumber
 ・(Bar contains[c] $value)
Display NameにSearchFieldのセレクタに書く文字列を入れる.
って感じ.
必要あればPredicate2 ...をいれる.
その他Predicateの書式については以下.Using Predicatesの項あたりが便利
Predicate Programming Guide
http://developer.apple.com/documentation/Cocoa/Conceptual/Predicates/predicates.html


そうするとこうなる.


また各カラムのソート機能がある(フィールドヘッダをクリックした時の動作(右寄りに矢印がでる)).


で,これはColumnのBindingに設定があった.

Creates Sort Descriptor にチェックをいれる.
・また,Table ViewのBindingのTable Contentの項の
 いずれもバインディングしてはいけない.
 ・Table ColumnのValueのバインディングのみで
  表を作成しておくこと(普通そうだよね…).
 ・以前の行選択を検出するサンプルでは
  TableView/TableContent/Content, Selection Indexes
  バインディングしており
  これは無駄かつSortができないので有害.
  …ごめんなさい.
  (2008/1/7付けでSelectedRowInTableView.zip を修正.)

でできたサンプルがこちら.
サンプル
http://y30.net/pg/cocoa_prj/Sample_SearchFieldAndSort.zip

0 件のコメント: