我想为我的NSTextView
子类绘制一个自定义焦点环(默认情况下没有焦点环)。我设法通过覆盖父NSScrollView
drawRect
并添加此代码来实现它:
- (void)drawRect:(NSRect)dirtyRect {
if (focused) {
NSSetFocusRingStyle(NSFocusRingOnly);
NSRectFill(dirtyRect);
}
[super drawRect:dirtyRect];
}
但是,我想绘制自己的自定义对焦环。我搜索并搜索了这个例子,并试着乱搞并自己写,但无济于事。我遇到的最大问题是它会被裁剪到NSScrollView
/ NSTextView
框架,无论我怎么做。
感谢。
答案 0 :(得分:0)
在Carbon框架中有HIThemeBeginFocus()
和HIThemeEndFocus()
,它们允许您使任何系列的绘图(例如矩形或形状)具有自动“聚焦”外观。需要Mac OS X 10.5或更高版本。
这直接使用Core Graphics。要从Cocoa中的drawRect:
方法中查找CG上下文,您可以执行以下操作:
NSGraphicsContext* contextMgr = [NSGraphicsContext currentContext];
CGContextRef drawingContext = (CGContextRef)[contextMgr graphicsPort];
就避免剪裁而言,一种选择是使用父视图(例如没有边框的NSBox
)来提供额外的填充。在父视图中不会被剪裁的插入位置执行自定义绘图;换句话说,假设视图比实际矩形小一点。