Tengo un NSButton en una aplicación Mac cuyo color me gustaría cambiar programáticamente pero nada de lo que probé parece funcionar. Traté de crear una salida en NSButtonCell y establecer el color de fondo allí, pero eso tampoco funcionó. Cualquier fragmento de código sería útil.Cambiar el color de fondo de NSButton
Respuesta
Los botones estándar Aqua (forma de píldora) son dibujados por el sistema. No tienen un color de fondo como tal. De hecho, están compuestos por imágenes que Cocoa cose para formar una imagen de botón coherente. Entonces Cocoa no puede volver a colorear las imágenes a su gusto. Solo el botón predeterminado (el que tiene Return configurado como su equivalente de tecla) tendrá un fondo azul pulsante.
Lo que parece que quiere hacer implicará la subclasificación NSButtonCell
y hacer su propio dibujo. Si desea volver a colorear las imágenes del botón para obtener el efecto que desea, puede usar la excelente utilidad Theme Park para extraer copias de las imágenes de los botones de Apple y usarlas. Admitiré haber hecho esto yo mismo para "robar" ciertos elementos de la interfaz a los que no se puede acceder de otra manera, como los scrollers de iTunes.
Suponiendo que todo esté conectado en IB para su botón sin bordes.
// *.h file
IBOutlet NSButton* myButton;
// *.m file
[[myButton cell] setBackgroundColor:[NSColor redColor]];
Nota de la setBackgroundColor documentación:
"El color de fondo sólo se utiliza en la elaboración de los botones sin bordes."
Si esto no lo hace por usted, entonces tendrá que anular NSButton e implementar el dibujo usted mismo.
Buena suerte.
Este funciona muy bien en la mayoría de mis ventanas. ¿Alguna idea de por qué no funciona en una ventana NSW con una NSToolbar que intercambia NSViews dentro y fuera? Los botones en esos NSViews 'intercambiables' no parecen verse afectados en absoluto por el color de fondo y, sin embargo, puedo cambiar el color del texto de ellos muy bien = ( – valheru
Esto no parece funcionar con rapidez. No lo hice 't ver el método setbackgroundcolor –
Esa propiedad en NSButtonCell todavía está allí en Swift. Debería ser algo como '(button.cell as? NSButtonCell) ?. backgroundColor = NSColor.red' – Mark
UIElement (elemento es de nada igual que Button, vista ....)
UIElement * nombre_var;
[varname setBackgroundColor:[UIColor colorWithRed:0.8 green:0.8 blue:0.6 alpha:1.0]];
por ejemplo: UIButton * pButton;
[pButton setBackgroundColor:[UIColor colorWithRed:0.8 green:0.8 blue:0.6 alpha:1.0]];
Eso no ayudará con un NSButton –
Lea la pregunta .. Dice NSButton no UIButton – ValayPatel
La respuesta de Mark es correcta. Pero si hacerlo por código será complicado para usted, entonces otra forma de hacerlo es configurarlo directamente en el constructor de interfaz.
- Encuentra el botón en interfaceBuilder y haz clic en él.
- En la sección del navegador de objetos del desarrollador de interfaz, verá que el botón en el que hizo clic tiene un icono de divulgación desplegable. Haz click en eso. Luego le mostrará NSButtonCell del NSButton. Haz click en eso.
- Con NSButtonCell seleccionado, haga clic en Identity-Inspector.
- En Identity-inspector busque la sección llamada
User Defined Runtime Attributes
- Haga clic en el pequeño signo más (+) para agregar un valor. El valor mostrará tener 3 propiedades. (A) keyPath (B) Tipo (C) Valor
- Cambiar el keyPath a:
backgroundColor
. Cambie el tipo a:Color
.Cambie el valor a: cualquiera que sea el color que desee (se mostrará un selector de colores)
Listo.
Lógicamente esto debería funcionar, pero no funcionó para mí. –
Recuerda establecer el botón en sin márgenes. –
- Estoy No digo que esto no funciona (Xcode 8.2.1) pero después de pasar casi una hora en él, no funcionó, no importa lo que haya cambiado, simplemente no funciona – Yatko
Aquí hay otra manera posible de hacer esto:
let button = NSButton()
button.title = ""
button.bezelStyle = .texturedSquare
button.isBordered = false //Important
button.wantsLayer = true
button.layer?.backgroundColor = NSColor.red.cgColor
Gracias por estos grandes respuestas. He compilado una subclase NSButton que facilita el ajuste de color de fondo, atributos de borde (color, ancho, esquinas) y atributos de título (color, fuente).
Siéntase libre de utilizar: https://github.com/philfung/osx-dudley/blob/master/DudNSButton.swift
Buen trabajo, gracias por compartir esto. Es posible que desee actualizar para la última versión de Swift, ya que parece que ya no se ejecuta –
Un método consiste en crear una vista detrás del botón y establecer el color de ello. Esto crea la vista con el mismo marco y coloca el botón en la parte superior de la vista. Utilizo una etiqueta en el botón para asegurarme de que solo agreguemos la vista una vez, por lo que se puede llamar al método repetidamente al dibujar la IU.
He incluido mi código para establecer el color del texto.
cambiar el color y alfa como se desee:
NSColor *colour = [NSColor colorWithRed:0.0 green:0.0 blue:1.0 alpha:0.5] ;
[self styleButton:button colour:colour] ;
-(void) styleButton:(NSButton *)button colour:(NSColor *)colour {
[self setButton:button fontColor:[NSColor whiteColor]];
if(button.tag == 9901) return ;
button.bezelStyle = NSBezelStyleTexturedSquare ;
[button setBordered:NO];
NSView *b2 = [[NSView alloc] initWithFrame:button.frame] ;
[button.superview addSubview:b2] ;
b2.layer.backgroundColor = colour.CGColor;
[button removeFromSuperview];
[b2.superview addSubview:button];
button.tag = 9901 ;
}
-(void) setButton:(NSButton *)button fontColor:(NSColor *)color {
NSMutableAttributedString *colorTitle = [[NSMutableAttributedString alloc] initWithAttributedString:[button attributedTitle]];
[colorTitle addAttribute:NSForegroundColorAttributeName value:color range:NSMakeRange(0, button.attributedTitle.length)];
[button setAttributedTitle:colorTitle];
}
He creado una subclase llamada NSButton
FlatButton
que hace que sea muy fácil de cambiar de color botón de fondo, color de texto, icono de color, bordes y otros tipos de estilo, desde el Interface Builder:
Gracias por el trabajo increíble. Todavía me sorprende la poca personalización que hay para los elementos de la interfaz de usuario de macOS.Por cierto, ¿es posible usar su FlatButton como ToggleButton? –
@SteveBegin Gracias! Sí, hay una opción isMomentary. – Oskar
Increíble trabajo, pero cuando intento agregar íconos a los botones parecen desproporcionados. –
- 1. Cambiar el color de fondo UIButton
- 2. xterm: cómo cambiar el color de fondo?
- 3. Cambiar el color de fondo en NSAttributedString
- 4. Cambiar color de fondo y color de fuente
- 5. div color de fondo, para cambiar onhover
- 6. ggplot2 facet_grid() cambiar color de fondo
- 7. Cambiar color de fondo ActionBar Tabs
- 8. JTable cómo cambiar color de fondo
- 9. ¿Cambiar el color de selección de fondo de ListView?
- 10. Cambiar el color de fondo de UIView programáticamente
- 11. ¿cómo podemos cambiar el color de fondo de una ruleta?
- 12. cambiar el color de fondo del elemento de navegación (barra)
- 13. ¿Cambiar el color de fondo de un UIAlertView?
- 14. Cambiar el color de fondo del menú de Android
- 15. Cambiar el color de fondo de jQuery deslizador
- 16. ¿Cómo cambiar el color de fondo de JOptionPane?
- 17. Cambiar el color de fondo de líneas en la pila
- 18. Cambiar el color de fondo de DateTimePicker en .NET
- 19. UISearchBar: cambiar el color de fondo del campo de entrada
- 20. Cambiar el color de fondo de un panel intellij
- 21. Cambiar el color de fondo de un NSCollectionView
- 22. Cambiar el color de fondo de ActionBarSherlock programmatically
- 23. Cambiar el color de fondo de una etiqueta en C#
- 24. Cómo cambiar el color de fondo de la vista enfocada
- 25. Cambiar el color de fondo del panel de zedgraph
- 26. ¿Cómo cambiar el color de fondo de JTabbedPane?
- 27. Cómo cambiar el color de fondo de wx.Panel en MouseOver?
- 28. ¿Puedo cambiar el color de fondo de la consola Firebug?
- 29. Cambiar el color de fondo del formulario con código hexadecimal
- 30. Cambiar el color de fondo del encabezado Datagrid en Silverlight
Eso explica por qué no puedo simplemente modificar el fondo ¡El parque temático es una verdadera joya! – aleemb
Cualquier idea sobre cómo hacer esto en Mountain Lion? El parque temático requiere Leopard –