NSTableView con botones Más y Menos

¿Cómo puedo hacer algo así?

Captura de pantalla

No encontré ningún objeto apropiado en la biblioteca de Interface Builder.

¿Alguna idea?

preguntado el 22 de mayo de 12 a las 17:05

4 Respuestas

La mejor manera que encontré es usar NSSegmentedControl.

después de arrastrarlo en el lienzo, debe configurar su estilo:

Style: Small Square
Mode:  Select Momentary

Se ve mejor. Ahora use el campo "imagen" para establecer NSAddTemplate y NSRemoveTemplate. Asegúrese de que el campo de la etiqueta esté vacío.

bueno tenemos"+""-" y un segmento vacío. Para evitar que el usuario seleccione el último, selecciónelo de Segmento aparecer y apagar habilitado casilla de verificación (ubicada al lado Localidad: etiqueta).

Y por último, lo que tenemos que hacer es establecer anchura de los dos primeros segmentos para hacerlos cuadrados.

  1. Utilice la herramienta Inspector de tallas
  2. Selecciona Segmento 0
  3. Apagar "fijo"casilla de verificación (el segmento debe cambiar de tamaño automáticamente para ajustarse a la imagen)
  4. Selecciona Segmento 1 y repite el numero 3
  5. Ahora, a medida que cambia el tamaño del control, solo el último segmento cambiará de ancho
  6. Póngalo en la parte inferior de la vista de la tabla y cambie el tamaño también.

Disfrutar;)

Respondido el 01 de junio de 16 a las 06:06

Me gusta más que la respuesta aceptada porque mantiene todo junto y puedo deshabilitar el tercer segmento sin cambiar su apariencia. Pero, ¿cómo maneja el cambio de tamaño de una ventana que extiende el control? - jeremyp

lo usé en la parte no redimensionable de la ventana. pero como sé, es realmente un desafío cambiar su tamaño. si logrará eso, hágamelo saber publicando otra respuesta y votaré por usted. - ratijas

@JeremyP Ver la segunda parte de la respuesta stackoverflow.com/a/22586314/15809 ; puede mezclar un control segmentado con un NSButton para obtener el aspecto, el comportamiento y el tamaño automático ideales. - mecki

FYI, ya no se llama Mode Select None pero Momentary - bithavoc

@bithavoc, ya no estoy con XCode / Cocoa y todo. siéntete libre de editar la respuesta. - ratijas

Actualización para OSX Yosemite

Traté de lograr el mismo aspecto que tiene Mail.app en la vista Cuentas (ventana derecha en mi captura de pantalla).

Logré el resultado deseado siguiendo los pasos a continuación:

  1. Agrega una NSSegmentedControl
  2. Agregue dos segmentos y configure la imagen para cada uno:
    • NSAddTemplate para + .
    • NSRemoveTemplate para - .
  3. Establezca el tamaño de los segmentos en fixed y establecer el valor para 32 píxeles
  4. El rectángulo junto a los botones es un NSButton con el estilo Gradient.
  5. El botón está habilitado pero Se niega al primer respondedor se establece a true para que no se pueda hacer clic.

Captura de pantalla

respondido 23 mar '15, 11:03

Utilice un NSButton con un estilo degradado y, para las imágenes, utilice el sistema proporcionado por NSAddTemplate y NSRemoveTemplate.

Respondido 19 Jul 12, 06:07

Agradable, pero cuando se usan varios botones de degradado, al deshabilitar uno de ellos se rompe el aspecto. El control segmentado funciona mejor aquí, ya que deshabilitar un solo segmento solo atenúa el texto o la imagen, pero no cambia el fondo. - mecki

Una respuesta aquí sugiere usar botones de degradado, sin embargo, estos botones no se pueden deshabilitar ya que esto hace que el fondo cambie y, por lo tanto, rompa la apariencia. Otro sugirió usar un control segmentado, que es casi perfecto, pero los controles segmentados no admiten el tamaño automático, por ejemplo, si el ancho de la tabla es dinámico. Mi sugerencia es una combinación de ambos. Use un control segmentado para los botones reales y un botón de degradado para llenar el resto del ancho de la tabla que ahora también puede ser dinámico si el ancho del botón también es dinámico.

Vea mi respuesta a una pregunta similar (con capturas de pantalla): https://stackoverflow.com/a/22586314/15809

contestado el 23 de mayo de 17 a las 13:05

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