Estoy desarrollando una aplicación Mac en XCode. Necesito agregar un hipervínculo que navegue a un sitio en particular. Intenté esto usando un botón, pero necesito saber cómo cambiar el cursor al cursor de mano cuando el mouse está sobre ese botón.Hipervínculo en Cocoa
Respuesta
Creo que puede usar un NSTextField no editable para mostrar la URL. Si establece los atributos apropiadamente en NSAttributedString que establece como la propiedad del valor del campo, se mostrará como el estándar azul con subrayado y manejará el seguimiento del cursor por usted. This Apple Q & A le dice cómo establecer los atributos de una URL.
Para establecer el cursor, debe utilizar el método de seguimiento del cursor addCursorRect:cursor:
. Sin embargo, en realidad solo se supone que debes llamar a ese método desde el interior del método resetCursorRects
. Si lo haces en cualquier otro momento, básicamente se garantiza que se ignorará.
Así que esto significa que necesita subclase NSButton
(o lo que sea NSView
subclase que desea utilizar) y anular resetCursorRects
llamar addCursorRect:cursor:
para toda la vista de bounds
.
trabajado para mí perfectamente, gracias. He subclase NSTextField. –
Me gustaría lanzar una respuesta actualizada para quien se tropiece con la siguiente.
Descubrí que cuando probé la solución especificada por Apple Q & A en la respuesta de Barry, el texto de mi enlace de etiqueta se reducía cuando se hacía clic. Después de algunas depuraciones, descubrí que el código de muestra en el artículo de Apple estaba configurando una nueva cadena atribuida, pero para empezar no estaba preservando ninguno de los atributos originales en el control de la etiqueta. La solución es simplemente comenzar con una copia de la cadena atribuida original de la etiqueta, agregar las nuevas propiedades de hipervínculo y luego actualizar la etiqueta.
He hecho una función auxiliar simple que convierte una etiqueta NSTextField en un hipervínculo. Básicamente, consolida la solución en la página de Apple sin la necesidad de agregar una extensión de categoría a NSAttributeString.
// Converts an otherwise plain NSTextField label into a hyperlink
-(void)updateControl:(NSTextField*)control withHyperlink:(NSString*)strURL
{
// both are needed, otherwise hyperlink won't accept mousedown
[control setAllowsEditingTextAttributes: YES];
[control setSelectable: YES];
NSURL* url = [NSURL URLWithString:strURL];
NSAttributedString* attrString = [control attributedStringValue];
NSMutableAttributedString* attr = [[NSMutableAttributedString alloc] initWithAttributedString:attrString];
NSRange range = NSMakeRange(0, [attr length]);
[attr addAttribute:NSLinkAttributeName value:url range:range];
[attr addAttribute:NSForegroundColorAttributeName value:[NSColor blueColor] range:range ];
[attr addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:NSUnderlineStyleSingle] range:range];
[control setAttributedStringValue:attr];
}
para invocar a continuación que, pase la NSTextField y la cadena de URL en algún momento cuando la ventana se inicializa:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[self updateControl:_label withHyperlink:@"http://www.stackoverflow.com"];
}
- 1. hipervínculo de Cocoa de iPhone
- 2. Hipervínculo en Android
- 3. Controlador ExtJS desencadenante en hipervínculo
- 4. Lectura del hipervínculo URL
- 5. Haga clic en hipervínculo en jtable?
- 6. Insertar imagen en hipervínculo en GWT
- 7. Superíndice/subíndice en hipervínculo en WPF
- 8. crear mailto hipervínculo que se abrirá en Outlook con un hipervínculo en el cuerpo
- 9. Yo observador en Cocoa
- 10. Mapa bidireccional en Cocoa
- 11. Escala WebView en Cocoa
- 12. OS comprobar en Cocoa
- 13. Justificación de texto en WPF hipervínculo
- 14. hipervínculo de Windows 8 xaml en línea
- 15. ¿Cómo hacer un hipervínculo simple en XAML?
- 16. Ejemplo de uso de hipervínculo en WPF
- 17. ¿Hipervínculo en el widget Tkinter Text?
- 18. Hacer una columna en SlickGrid un hipervínculo
- 19. Cómo agregar un hipervínculo en JLabel
- 20. Detener hipervínculo automático en Outlook, Gmail, etc.
- 21. Crear hipervínculo en asp.net gridview C#
- 22. ¿Puedo especificar explícitamente NavigateUrl en un hipervínculo?
- 23. ¿Por qué usar window.location en un hipervínculo?
- 24. Haga clic en Evento de hipervínculo
- 25. Cómo agregar NavigateUrl hipervínculo en gridview
- 26. Crear hipervínculo en el control TextBox
- 27. Android: Vista de Texto hipervínculo
- 28. Agregar hipervínculo a WPF WPF
- 29. WPF Resources.resx cadena con hipervínculo?
- 30. mapas abrir Google de hipervínculo
El único problema con esta nota técnica de Apple es que el cursor del mouse aún cambia al cursor de estilo de entrada de texto con barra en I sobre el mouse. –
Un problema más es que al hacer clic en el enlace se cambia la fuente de NSTextField al valor predeterminado del sistema. Las siguientes soluciones que fallan al forzar que el texto herede la fuente del campo de texto: '[attString addAttribute: NSFontAttributeName value: [label font] range: NSMakeRange (0, [attString length])];' –