2011年4月30日土曜日

Cocoa Tabbed Interface Notification

overflowボタンを押した、という通知はNotificationでやってみる。これにはメニュー表示を伴うため、NSEventが必要になる。KVOでもNSDictionaryをつけることができるからNotificationにしなければいけない必然性はない。ま、なんでもやってみるということで。

-(void)mouseDown:(NSEvent *)theEvent{
    NSPoint point = [self convertPointFromBase:[theEvent locationInWindow]];
    if(buttonState!=OV_DISABLE){
        if (NSPointInRect(point, buttonImageRect)){
            if(buttonState==OV_HOVER){
                buttonState=OV_PUSHED;
                isPress=YES;
            }
            [self setNeedsDisplay:YES];
        }
    }
}
-(void)mouseUp:(NSEvent *)theEvent{
    NSPoint point = [self convertPointFromBase:[theEvent locationInWindow]];
    if(buttonState!=OV_DISABLE){
        if (NSPointInRect(point, buttonImageRect)){
            if(buttonState==OV_PUSHED){
                
                buttonState=OV_HOVER;
                isPress=NO;
                NSDictionary* userInfo=[NSDictionary dictionaryWithObject:theEvent forKey:@"buttonEvent" ];
              
                [[NSNotificationCenter defaultCenter]postNotificationName:@"OverflowButtonIsPressed" object:self userInfo:userInfo];
                //[self tabScroll:OV_LEFT :theEvent];                
            }
        }
        else buttonState=OV_NORMAL;
        [self setNeedsDisplay:YES];
    }
}

isPressってのがKVO用に用意していたメンバなわけだが、結局使ってないな。こんな感じでNSEventをNSDictionaryに収めてNotificationを飛ばし、これをTabBarControllerで受ける、と。

だいたいこれでTab関係の書き直しが終了したので、本日は新しいプロジェクトを作ってtab関連のファイルをコピーして使えるか試してもみた。

実はこれですごい苦労をした。.xibファイルのコピーって鬼門なのかな。TabBarControllerの- (id)initWithNibName:でKVOのaddObserverが有効にならないし、nib上のViewのメンバを書き換えられなくなった。うーん、と腕を組んだけど- (id)initWithNibName:以外ならIBOutletでつながれたViewにちゃんとアクセスできたのでそれでよしとする。要調査。

0 件のコメント:

コメントを投稿