我在容器中有一个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放在每个绝对位置上。
答案 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];