program developer descargar desarrollador dark cuenta apple app objective-c cocoa macos user-interface

objective-c - developer - xcode dark mode



Cambiar el color de fondo de NSButton (8)

Tengo un NSButton en una aplicación de Mac cuyo color me gustaría cambiar programáticamente, pero nada de lo que intenté parece funcionar. Intenté crear una salida en el NSButtonCell y establecer el color de fondo allí, pero tampoco funcionó. Cualquier fragmento de código sería útil.


Aquí hay otra forma 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



He creado una subclase de NSButton llamada FlatButton que hace que sea muy fácil cambiar el color de fondo de los botones, el color del texto, el color del icono, los bordes y otros tipos de estilos, desde Interface Builder:

https://github.com/OskarGroth/FlatButton


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 generador de interfaces.

  1. Encuentra el botón en interfaceBuilder y haz clic en él.
  2. En la sección del navegador de objetos del creador de interfaces, verá que el botón en el que hizo clic tiene un icono de divulgación desplegable. Haz click en eso. Entonces le mostrará el NSButtonCell del NSButton. Haz click en eso.
  3. Con el NSButtonCell seleccionado, haga clic en el Inspector de identidad.
  4. En el inspector de identidad, busque la sección denominada User Defined Runtime Attributes
  5. Haga clic en el pequeño signo más (+) para agregar un valor. El valor mostrará que tiene 3 propiedades. (A) keyPath (B) Tipo (C) Valor
  6. Cambie el keyPath a: backgroundColor . Cambia el tipo a: Color . Cambie el valor a: el color que desee (se mostrará un selector de color)

Hecho.


Los botones estándar de Aqua (en forma de píldora) son dibujados por el sistema. No tienen un color de fondo como tal. De hecho, se componen de imágenes que Cocoa une para hacer una imagen de botón coherente. Así que Cocoa no puede recolorear las imágenes a tu gusto. Solo el botón predeterminado (el que tiene establecido el Retorno como su equivalente en clave) tendrá un fondo azul pulsante.

Lo que parece que quieres hacer involucra subclasificar NSButtonCell y hacer tu propio dibujo. Si desea recolorear las imágenes de los botones para obtener el efecto que desea, puede usar la excelente utilidad del Parque de temas para extraer copias de las imágenes de los botones de Apple y usarlas. Admito que he hecho esto por mí mismo para "robar" ciertos elementos de la interfaz que no son accesibles 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 documentación de setBackgroundColor :

"El color de fondo se usa solo cuando se dibujan botones sin bordes".

Si esto no lo hace por usted, tendrá que anular NSButton e implementar el dibujo usted mismo.

Buena suerte.


UIElement (el elemento es de cualquier botón de Me gusta, ver ....)

UIElement * varname;

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


Un método es crear una vista detrás del botón y establecer el color de eso. 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, de modo que se pueda llamar repetidamente al método al dibujar la interfaz de usuario.

He incluido mi código para configurar el color del texto.

Cambia el color y el alfa como desees:

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]; }