我正在使用- (void)drawInsertionPointInRect:(NSRect)aRect color:(NSColor *)aColor turnedOn:(BOOL)flag
更改插入符号大小。无论如何,当我移动选择时,插入符会暂时变回其默认大小。
是否有另一种方法可以绘制我需要覆盖的插入符号?
我目前正在做什么:
- (void)drawInsertionPointInRect:(NSRect)aRect color:(NSColor *)aColor turnedOn:(BOOL)flag {
aRect.origin.y -= 1;
aRect.origin.x -= 1;
aRect.size.width += 1;
aRect.size.height += 1;
[super drawInsertionPointInRect:aRect color:aColor turnedOn:flag];
}
答案 0 :(得分:2)
原始答案:
如果你还没有这样做,请继承NSTextView
,然后自己实施drawInsertionPointInRect:color:turnedOn:
方法,自己做一个花式插图。
还要注意文档中的这一行:
调用此方法时,焦点必须锁定在接收器上。 您不需要直接调用此方法。
子类化是要走的路。
更具体应用答案:
请考虑自己完成所有绘图,而不是调用[super drawInsertionPointInRect...
。
这样的事情:
- (void)drawInsertionPointInRect:(NSRect)rect color:(NSColor *)color turnedOn:(BOOL)flag
{
//Block Cursor
if( flag )
{
NSPoint aPoint=NSMakePoint( rect.origin.x,rect.origin.y+rect.size.height/2);
int glyphIndex = [[self layoutManager] glyphIndexForPoint:aPoint inTextContainer:[self textContainer]];
NSRect glyphRect = [[self layoutManager] boundingRectForGlyphRange:NSMakeRange(glyphIndex, 1) inTextContainer:[self textContainer]];
[color set ];
rect.size.width =rect.size.height/2;
if(glyphRect.size.width > 0 && glyphRect.size.width < rect.size.width)
rect.size.width=glyphRect.size.width;
NSRectFillUsingOperation( rect, NSCompositePlusDarker);
} else {
[self setNeedsDisplayInRect:[self visibleRect] avoidAdditionalLayout:NO];
}
}
的代码
答案 1 :(得分:1)
我遇到了同样的问题。 Donovan的答案解决了这个问题,但当我试图绘制“透明”插入符号时,我需要做更多的事情,我有一个解决方案。
我为它做了一篇博客文章。 http://programming.jugglershu.net/wp/?p=765
“如何绘制厚实透明的插入符号”的答案是......
我希望这可以帮助那些想要做同样事情的人。
答案 2 :(得分:-1)
似乎唯一的解决方案是覆盖未记录的方法- (void)_drawInsertionPointInRect:(NSRect)aRect color:(NSColor *)color
。不过,我希望有更好的解决方案。