尝试完善NSTextField的边框(左上角的小黑框):http://cl.ly/image/2V2L1u3b3u0G
所以我将NSTextField子类化了:
MYTextField.h
#import <Cocoa/Cocoa.h>
@interface HATrackCounterField : NSTextField
@end
MYTextField.m
#import "HATrackCounterField.h"
@implementation HATrackCounterField
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {}
return self;
}
- (void)drawRect:(NSRect)dirtyRect
{
[[NSColor blackColor] setFill];
[[NSBezierPath bezierPathWithRoundedRect:dirtyRect xRadius:3.0 yRadius:3.0] fill];
}
@end
现在它没有显示文字字段文字:http://cl.ly/image/1J2W3K431C04
我是Objective-c的新手,看起来这应该很容易,所以我可能只是做错了......
谢谢!
注意:我正在通过集合视图设置文本,并且我在不同点尝试setStringValue:
也无济于事。
答案 0 :(得分:5)
您的文本字段文字未显示,因为您覆盖-drawRect
并且未在其中调用[super drawRect:dirtyRect]
。
在你的情况下,我认为做你想做的最简单的方法是使用剪辑蒙版:让NSTextField
执行绘图蚂蚁然后剪辑区域:
- (void)drawRect:(NSRect)dirtyRect
{
[NSGraphicsContext saveGraphicsState];
[[NSBezierPath bezierPathWithRoundedRect:dirtyRect xRadius:3.0 yRadius:3.0] setClip];
[super drawRect:dirtyRect];
[NSGraphicsContext restoreGraphicsState];
}
一般来说,最好将NSTextFieldCell
子类化为自定义绘图,因为单元格负责绘制。
答案 1 :(得分:3)
作为未来读者的参考,这可能是你应该如何做到的,通过继承NSTextFieldCell
:
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
NSBezierPath *betterBounds = [NSBezierPath bezierPathWithRoundedRect:cellFrame xRadius:CORNER_RADIUS yRadius:CORNER_RADIUS];
[betterBounds addClip];
[super drawWithFrame:cellFrame inView:controlView];
if (self.isBezeled) { // optional, but provides an example of drawing a prettier border
[betterBounds setLineWidth:2];
[[NSColor colorWithCalibratedRed:0.510 green:0.643 blue:0.804 alpha:1] setStroke];
[betterBounds stroke];
}
}
我在这里画了一个额外的蓝色边框(虽然这对你的黑盒子来说似乎没必要)