Оригинальный ответ:
Если вы еще этого не делаете, создайте подкласс 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];
}
}
(код, для которого я укралотсюда )