2012-09-30 121 views
3

我已经subclassed NSButton和NSButtonCell,我已经改变了图纸。现在对焦环不再出现在按钮上。我正在寻找一种方法在我的自定义按钮上绘制具有自定义颜色的对焦环。自定义NSButton焦点环颜色

问题更新

+0

聚焦环是由单元格类绘制的吗?你的子类实现了哪些方法可能会破坏它? – trojanfoe

+0

我已经分类了NSButtonCell。 –

回答

-2

您可以添加您的自定义按钮跟踪区域,然后您可以自定义按钮的焦点。

-(void)awakeFromNib{ 
int opts = (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways); 
NSTrackingArea *trackingArea = [[NSTrackingArea alloc] initWithRect:self.frame options:opts owner:self userInfo:nil]; 
[self addTrackingArea:trackingArea]; 
} 

现在您可以在以下功能中进行自定义。

- (void) mouseEntered:(NSEvent*)event{ 
     //Add Custom Focus Ring 
} 

- (void) mouseExited:(NSEvent*)event{ 
     //Remove Custom Focus Ring 
} 
+0

这是一个不好的方法。 –

+0

我认为,除此之外没有别的办法。或者你可以尝试像这样:http://stackoverflow.com/questions/12118932/nsbutton-image-shadow-on-mouseentered-event/12802496#12802496 –

+1

你没有完全理解我的问题。我问了Focus Ring。它与悬停效果不同。 –

1

我不知道如何绘制自己的对焦环(所以你做一个自定义颜色),但有你的自定义按钮电池抽取对焦环,你通常只需要重写focusRingMaskBoundsForFrame:inView:是这样的:

- (NSRect)focusRingMaskBoundsForFrame:(NSRect)cellFrame inView:(NSView *)controlView 
{ 
    return cellFrame; 
} 

如果不给你你想要的结果,您可能需要通过实施drawFocusRingMaskWithFrame:inView:额外提供口罩。在这个方法中,你基本上只画出应该增加焦点环的东西。可可为你做了其余的事情。

请注意,这些方法仅适用于Mac OS X 10.7 Lion及更高版本,但这就是Apple如何说现在应该完成的。

+0

我无法得到这个工作 - 这些方法没有被调用,所以我不得不恢复到10.7之前绘制对焦环的方式。网上似乎没有任何帮助。 – trojanfoe