修改NSTextField焦点环的形状

时间:2014-09-11 21:45:29

标签: objective-c cocoa

我有一个带有圆角的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的形状?

2 个答案:

答案 0 :(得分:2)

您可以覆盖- (void)drawFocusRingMaskWithFrame:inView:并在NSTextFieldCell中绘制自己的

通过创建一个包含视图框架的路径并添加一些角半径,这应该很容易。请记住使用[NSColor keyboardFocusIndicatorColor],以使其与用户的选择颜色相匹配。

答案 1 :(得分:1)

是的,我已经这样做了;但它已经有一段时间了,所以可能需要一些编辑:)

我相信你有两个选择:

  1. 您可以将focusRingType设置为NSFocusRingTypeNone,然后在[super drawInteriorWithFrame:]后,您可以使用[NSBezierPath bezierPathWithRoundedRect:]之类的内容绘制自己的焦点铃声。
  2. 您可以覆盖名为(我认为)_drawFocusRingWithFrame
  3. 的私有方法

    无论哪种方式,你都会自己画戒指,但这部分很容易。如果您希望系统聚焦环颜色使用[NSColor keyboardFocusIndicatorColor]作为路径的笔触颜色。

    在10.7或更高版本上,drawFocusRingMaskWithFrame上有一个名为NSCell的方法。