2011年4月3日日曜日

Cocoa NSSegmentedControll

アウトライン表示は検索やサムネイル表示と切り替えるようにする。

まずは切り替え可能にするため、Toolbarに切り替えボタンをつける。NSSegmentedControllを使ってみた。


Toolbarへのコントロールの追加はこんな感じ。

    else if([itemIdent isEqual:SidePanelViewSelectIdentifier]){
        toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdent] autorelease];
        [toolbarItem setLabel:@"Select sidePanel View"];
        [toolbarItem setPaletteLabel:@"sidePanelSelect"];
        [toolbarItem setToolTip:@"Select SidePanel View"];
        [toolbarItem setView:sidePanelzselectButton];
        [toolbarItem setTarget:self];
        [toolbarItem setAction:@selector(sidePanelViewChange:)];
     }
ToolTipとかはInterfaceBuilderでつけてしまえるよなあ。今度からできるだけInterfaceBuilderでできることはそっちに任せることにしよう。ググっていきついたコードがけっこう古い場合、InterfaceBuilderがあまり使われていないことがある。コードの量は少ないほうがよろしいだろう。む?待てよ、toolbaritemのToolTipとかだから、やはりコード中でやってしまう必要があるのか・・・。

NSSegmentedControllのSegmentにtagをつけて、どのSegmentが押されたのか判別する、のだけれど、その方法がわからずしばらく悩んだ。ググって調べてもあまりよくわからない。

なんのことない、デベロッパドキュメントにちゃんと書いてあった。まずはドキュメントのsystemガイド中の文書を当たるのが一番だったりしますな、Cocoaは。

-(void)sidePanelViewChange:(id)sender{
 
    NSInteger clicked=[sender selectedSegment];
    NSInteger clickedTag=[[sender cell] tagForSegment:clicked];
    NSLog(@"%ld",clickedTag);
    [self changeSideView:clickedTag];

}
[sender selectedSegment]で押されたSegmentのindexを取得して、そのindexを[[sender cell] tagForSegment:に渡す、ということなのね。夕食後の自由時間はこの方法を調べだすのに使い尽くしてしまった。(^^;)

ここまで一応、アウトラインのViewをaddSubviewできるところまではきた。まだdelegateメソッドやDataSourceのメソッドを実装していなので表示はできてないけれど。

というわけで表示その他は明日以降。

0 件のコメント:

コメントを投稿