有沒有辦法專注於NSBox並繪製該框的對焦環? 我以爲[box drawFocusRingMask];可能是類似的東西,但沒有任何反應。 我只需要一個盒子在按鈕被點擊時在其周圍有一個對焦環。NSBox聚焦環?
在此先感謝。
有沒有辦法專注於NSBox並繪製該框的對焦環? 我以爲[box drawFocusRingMask];可能是類似的東西,但沒有任何反應。 我只需要一個盒子在按鈕被點擊時在其周圍有一個對焦環。NSBox聚焦環?
在此先感謝。
假設你部署到10.7或更高版本,你可以做一個自定義的視圖類(也許NSBox的子類),並用它覆蓋下面的方法:
- (BOOL)acceptsFirstResponder {
return YES;
}
- (void)drawFocusRingMask {
NSRectFill([self bounds]);
}
- (NSRect)focusRingMaskBounds {
return [self bounds];
}
如果繼承NSBox,您可以使用如果您願意,可以使用-borderRect
而不是bounds
。
編輯:您可能可以使用10.7款之前的對焦環畫。你可以這樣做:
-(void)drawRect:(NSRect)rect
{
NSResponder* fr = [[self window] firstResponder];
if ([fr isKindOfClass:[NSView class]] && [(NSView*)fr isDescendantOf:self])
{
[NSGraphicsContext saveGraphicsState];
NSSetFocusRingStyle(NSFocusRingOnly);
[[NSBezierPath bezierPathWithRect:NSInsetRect([self bounds],4,4)] fill];
[NSGraphicsContext restoreGraphicsState];
}
// ... normal drawing, possibly invoking super ...
}
的觀點也必須留意在第一響應變化和自身調用-setKeyboardFocusRingNeedsDisplayInRect:
。另外,可能需要在NSFocusRingTypeExterior
的設置過程中自行撥打-setFocusRingType:
,雖然這可能是默認設置,具體取決於超類。
感謝您的回覆。它現在創建一個聚焦環,但它只在點擊nsbox的標題時創建。但是,我希望在點擊nsbox內的任何位置時顯示它(我不會有標題)。如果我調用drawFocusRingMask,它會用黑色填充整個nsbox。有沒有一種方法可以顯示對焦環,而不僅僅是當標題被點擊時,但盒子內的任何位置? – Dennis 2012-04-07 22:13:56
這不是聚焦環的工作原理。特別是在10.7及更高版本中,AppKit會自動處理更多的對焦環內容。也許你應該停止思考一個聚焦環,並創建一個自定義視圖,當第一個響應者是其後代視圖時,以不同的方式繪製自己的視圖(以自定義的方式)。 – 2012-04-08 07:25:34
我想到了一種使用10.7之前的對焦環畫技術並編輯了我的答案的方法。 – 2012-04-08 07:39:24
NSBox對焦點有什麼意義?它將會收到什麼關鍵事件?你可以通過繼承NSBox和覆蓋'-acceptsFirstResponder'來返回YES來實現某些功能,但是你必須對接收到的關鍵事件做些什麼。 – 2012-04-07 08:24:13
@KenThomases我打算爲這個盒子畫焦點環時說出它的焦點。我只需要一個盒子或其他東西,當我需要時可以在邊框上畫一個對焦環。有沒有簡單的方法來做到這一點?我嘗試了繼承NSBox並覆蓋acceptFirstResponder,但沒有任何效果。 – Dennis 2012-04-07 08:39:42