2011年4月18日月曜日

Cocoa なんちゃってtabbed interface(2) NSCell

単に図形としてTabを描くだけではその後の処理がいろいろたいへんになりそうなので、NSCellのカスタムクラスでTabを表現してみることにした。

NSMatrixで横一列にして表示できるのでは?と思ってNSMatrixについて調べ始めたが、これが全然わかんない。(^^;)xcatsan師匠の解説の通りにやってみようとしたのだけれど、Cellが描画されずに悶絶する。

どーもNSMatrixは鬼門だ。MacRubyの時も挫折したし。

試しにNSViewのカスタムクラスの中で、
MyCell *cell=[[MyCell alloc]initWithTitle:@"first"];
    [cell drawWithFrame:NSMakeRect(10, 0, 100, 20) inView:self];

とやってみたら簡単にNSCellが描画された。なーんだ、NSMatrix使わなくてもいいじゃない。
で、少しコードを書いた結果がこれ。


相変わらずのインチキコードなんだけど、それらしくなることはなるな。
ところがNSCell、軽量なクラスだけあってイベント処理ができない(らしい)。mouseDownもNSCellを保持しているView側で全部処理する必要がある。

そこでやっぱりxcatsan師匠のサンプルコードを読みながらイベント処理を付け加えようとしたら、なんだかよくわからないエラーが発生して難儀しているのが現在。

うーん、NSCellではなくViewでやっちゃおうか。(^^;)

(追記)
恥ずかしながらエラーの原因が判明。
tabs=[[NSMutableArray alloc]initWithCapacity:1];
としなければいけないところを、
tabs=[NSMutableArray initWithCapacity:1];
としていた。orz。その後は順調。

0 件のコメント:

コメントを投稿