2012-12-13 96 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; 

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