我有一个带有圆角的NSTextField,通过子类化NSTextFieldCell并覆盖
(void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
使用以下
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
controlView.layer.cornerRadius = cellFrame.size.height / 2;
[super drawInteriorWithFrame:cellFrame inView:controlView];
}
这似乎工作正常,但是当文本字段是第一响应者时,焦点环仍然显示为矩形形状。是否可以修改聚焦环以对应NSTextField的形状?
答案 0 :(得分:2)
您可以覆盖- (void)drawFocusRingMaskWithFrame:inView:
并在NSTextFieldCell中绘制自己的
通过创建一个包含视图框架的路径并添加一些角半径,这应该很容易。请记住使用[NSColor keyboardFocusIndicatorColor]
,以使其与用户的选择颜色相匹配。
答案 1 :(得分:1)
是的,我已经这样做了;但它已经有一段时间了,所以可能需要一些编辑:)
我相信你有两个选择:
focusRingType
设置为NSFocusRingTypeNone
,然后在[super drawInteriorWithFrame:]
后,您可以使用[NSBezierPath bezierPathWithRoundedRect:]
之类的内容绘制自己的焦点铃声。_drawFocusRingWithFrame
无论哪种方式,你都会自己画戒指,但这部分很容易。如果您希望系统聚焦环颜色使用[NSColor keyboardFocusIndicatorColor]
作为路径的笔触颜色。
在10.7或更高版本上,drawFocusRingMaskWithFrame
上有一个名为NSCell
的方法。