Falta el punto de inserción en NSTextField

Tengo un NSTextField en un contenedor:

[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;

El contenedor en sí está ubicado en una vista con

[view scaleUnitSquareToSize:NSMakeSize(1, -1)];

Todo esto es para obtener un origen superior izquierdo para TextField y funciona muy bien, el único problema consiste en que InsertionPoint no dibuja (al menos no en el marco visible).

Supongo que InsertionPoint no está escalado ni traducido con TextField. Otra posibilidad es que InsertionPoint no se pueda dibujar en una Vista respaldada por capas.

¿Hay alguna manera de mostrar el cursor InsertionPoint?

EDITAR

Después de probar todas las posibilidades, parece que el InsertionPoint (y el focusRing) no están dibujando debido a que su marco está fuera de los límites de las supervistas y su sucioDrawRect. ¿Hay alguna manera de eliminar el recorte de un NSView? Necesito poder colocar mi TextField en cada posición absoluta posible.

preguntado el 22 de noviembre de 13 a las 15:11

2 Respuestas

Encontré una forma: implementar el dibujo yo mismo.

1) dando un TextView personalizado como Editor para la ventana.

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

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

2) Anular el método drawInsertionPoint en la clase TextView personalizada.

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

respondido 25 nov., 13:14

Para el punto de inserción, simplemente haga su campo de texto para el primer respondedor.

  [myTextField becomeFirstResponder];

respondido 22 nov., 13:18

TextField debería convertirse en FirstResponder automáticamente cuando hago clic dentro de TextField. Y puedo Editar/seleccionar (la selección es dibujar)/copiar el texto, solo que el InsertionPoint no está dibujando. - Junghans

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.