2012-09-30 100 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