2011年3月22日火曜日

NSToolbar(3)

めんどくせ、などとネガティブな発言をしてしまって反省。(^^;)Menuと同じでそれほど面倒ではなさそうだ。カスタムViewを簡単にToolbarにのっけてしまえるところは激しく良。

昨日骨組みだけ書いてあったNSToolbarのdelegateメソッド、本日少し書いてみた。といってもADCのサンプルからコピペしたコードが多い。ま、コピペするにもそれなりの取捨選択と事前作業が必要なので、それほど悲観することもないだろう。

- (NSToolbarItem *) toolbar: (NSToolbar *)toolbar itemForItemIdentifier: (NSString *) itemIdent willBeInsertedIntoToolbar:(BOOL) willBeInserted {
     NSToolbarItem *toolbarItem = nil;
    if([itemIdent isEqual: SearchDocToolbarItemIdentifier]) {
        // NSToolbarItem doens't normally autovalidate items that hold custom views, but we want this guy to be disabled when there is no text to search.
        toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdent] autorelease];

        // Set up the standard properties 
        [toolbarItem setLabel: @"Search"];
        [toolbarItem setPaletteLabel: @"Search"];
        [toolbarItem setToolTip: @"Search Your Document"];
        
        searchFieldOutlet = [[NSSearchField alloc] initWithFrame:[searchFieldOutlet frame]];
        // Use a custom view, a text field, for the search item 
        [toolbarItem setView: searchFieldOutlet];
        [toolbarItem setMinSize:NSMakeSize(30, NSHeight([searchFieldOutlet frame]))];
        [toolbarItem setMaxSize:NSMakeSize(200,NSHeight([searchFieldOutlet frame]))];
        [toolbarItem setTarget:self];
        [toolbarItem setAction:@selector(beginSearch:)];
 }
    return toolbarItem;
}
- (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar {
    return [NSArray arrayWithObjects:NSToolbarFlexibleSpaceItemIdentifier, SearchDocToolbarItemIdentifier, nil];
}
- (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar {
    return [NSArray arrayWithObjects:NSToolbarFlexibleSpaceItemIdentifier,SearchDocToolbarItemIdentifier, nil];

}

これだけでサーチフィールドが表示できた。


あとはactionを実装していくわけだが、InterfaceBuilderでNSSearchFieldのSendsWholeSearchStringを有効にしても、キーボードから1文字入力するたびにいちいちactionが呼ばれているのはなぜだろう。この辺は実際に作ってみればわかるか。

NSToolbarはけっこう重要なUIクラスらしい、とだんだんわかってきた。OSXのアプリってWinアプリのようなToolbarの使われ方(MenuのショートカットUI版、とでも言うか)をしていない、という印象が強いのだが、

[toolbar setDisplayMode: NSToolbarDisplayModeLabelOnly]

で使われていることがけっこうあるみたい、と気づいた。早い話、Xcode4で⌘+Fを押したら出てくる検索バー、


ついでにそのすぐ上の「ファイル・クラス・メソッドのセレクタ」も同じく NSToolbarDisplayModeLabelOnly、と思われる。使い方を勉強する価値が十分にある、ということね。

0 件のコメント:

コメントを投稿