2012-12-13 154 views
3

我試圖自定義我的應用程序的用戶界面,我希望我的NSTableView具有圓角。所以我子類NSTableView的,並得到這個:帶圓角的NSTableView

Imgur

然而,當我填寫表格,並選擇一排,選擇上繪製的邊界是這樣的:

Imgur

我我試圖在表格視圖繪圖代碼中添加一個剪輯,它不起作用。有關我如何解決這個問題的任何建議?

編輯:

我在NSTableView的繪圖代碼如下:

- (void)drawRect:(NSRect)dirtyRect { 
    [NSGraphicsContext saveGraphicsState]; 
    NSRect frame = NSMakeRect(0.0, 0.0, [self bounds].size.width, [self bounds].size.height-1.0); 
    [[NSBezierPath bezierPathWithRoundedRect:frame xRadius:3.6 yRadius:3.6] addClip]; 
    [super drawRect:dirtyRect]; 
    [NSGraphicsContext restoreGraphicsState]; 
} 

實際圓形框架在NSScrollView的drawRect方法繪製。有趣的是,這並剪輯的第一個和最後一個行的選擇:

Imgur

而不是在表中滾動:

Imgur

所以問題仍然存在:我如何剪切NSScrollView的圓形框架內的所有繪圖?

+0

你會發布你的代碼,做剪輯? – paulmelnikow

+0

你重寫了'drawRect'和'initWithRect'嗎? –

+0

@FireLizzard我會在initWithRect方法中放什麼?我在上面的NSTableView中發佈了我的drawRect方法。框架的實際繪圖發生在NSScrollView的drawRect方法中。 – danjonweb

回答

3

我能用CALayer很好地解決這個問題。從NSScrollView試圖繼承一切NSTableView的到NSClipView,但還是收到上面顯示的渲染問題之後,我最後乾脆將此代碼添加到NSScrollView子類的drawRect:

if (!self.contentView.wantsLayer) { 
    [self.contentView setWantsLayer:YES]; 
    [self.contentView.layer setCornerRadius:4.0f]; 
} 

然後我繪製框架在同NSScrollView的drawRect方法。它解決了上述所有問題。

3

我發現你可以在表視圖的容器滾動視圖中調用它。

self.scrollView.wantsLayer = TRUE; 
self.scrollView.layer.cornerRadius = 6; 

這就是我所需要的,它的工作原理。不需要子類。