子类化NSButton,需要使它看起来像一个常规按钮

时间:2012-05-04 05:25:46

标签: cocoa nsbutton

我正在继承NSButton,因为我需要在按住鼠标时重复选择器。

我这样做:

- (id)initWithFrame:(NSRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code here.
        [self setBezelStyle:NSBezelBorder];
        PotRightIsDown = NO;
    }

    return self;
}

- (void)drawRect:(NSRect)dirtyRect
{
    // Drawing code here.
}

- (void)mouseDown:(NSEvent *)theEvent;
{    
    NSLog(@"pot right mouse down");
    PotRightIsDown = YES;
    holdDownTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(sendCommand) userInfo:nil repeats:YES];
}

- (void)mouseUp:(NSEvent *)theEvent;
{
    NSLog(@"pot right mouse up");
    PotRightIsDown = NO;
}

-(void)sendCommand
{
    if (PotRightIsDown)
    {
        NSLog(@"run the stuff here");
    }
    else 
    {
        [holdDownTimer invalidate];
    }
}

像冠军一样工作,每100毫秒发送一次命令。

在IB的窗口中,我将一个斜角按钮拖到窗口上,并将它的类设置为该子类。当我运行应用程序时,该按钮是不可见的,但它可以工作。我猜这是因为我在子类中有一个空的drawRect函数。

如何使此子类按钮看起来像斜角按钮?

谢谢你,
有状态

1 个答案:

答案 0 :(得分:3)

如果您没有向特定的子类方法添加任何功能,那么您可以完全避免实现它,这将允许超类提供默认行为。

或者(正如我的@Carl Norum指出的那样)你可以使用以下方式明确地做到这一点:

- (void)drawRect:(NSRect)dirtyRect
{
    [super drawRect:dirtyRect];
}

但这有点无意义。