缺少NSTextField中的插入点

时间:2013-11-22 15:31:06

标签: macos cocoa nstextfield nstextview

我在容器中有一个NSTextField:

[textField setFrameOrigin:NSMakePoint(0, -t.frame.size.height)];
content = [[NSView alloc] init];
[content setWantLayer:YES]
content.layer=[CALayer layer];
[content addSubview:textField];
[content scaleUnitSquareToSize:NSMakeSize(1, -1)];
content.frame=textField.frame;
content.layer.backgroundColor=textBGColor.CGColor;

容器本身位于带

的视图中
[view scaleUnitSquareToSize:NSMakeSize(1, -1)];

这是为了获得TextField的左上角原点并且效果很好,唯一的问题在于InsertionPoint不是绘图(至少不在可见帧中)。

我认为插入点不是缩放的,也不是用TextField翻译的。其他可能性是InsertionPoint无法在图层支持的View中绘制。

有没有办法显示InsertionPoint游标?

修改

在尝试了所有可能性后,似乎InsertionPoint(和focusRing)没有绘制,因为它的框架位于超视图边界及其dirtyDrawRect之外。有没有办法删除NSView的剪辑?我需要能够将TextField放在每个绝对位置上。

2 个答案:

答案 0 :(得分:1)

我找到了一条路:自己实施绘图。

1)为窗口提供自定义TextView作为编辑器。

- (id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)anObject
{

    if (!myCustomFieldEditor) {
        myCustomFieldEditor = [[TextView alloc] init];
        [myCustomFieldEditor setFieldEditor:YES];
    }
    return myCustomFieldEditor;
}

2)在自定义TextView类中重写drawInsertionPoint方法。

-(void)drawInsertionPointInRect:(NSRect)rect color:(NSColor *)color turnedOn:(BOOL)flag{
    [color set];
    NSRectFill(rect);
    [super drawInsertionPointInRect:rect color:color turnedOn:flag];
}

答案 1 :(得分:0)

对于插入点,只需将文本字段设为第一响应者。

  [myTextField becomeFirstResponder];