2012-07-30 7 views
5

Quiero implementar un 3-panel vertical NSSplitView (muy similar a Mail.app). No estoy seguro de por dónde empezar. Estoy bastante seguro de que necesito implementar un NSSplitViewDelegate, pero no estoy seguro de qué métodos y/o sus implementaciones.¿Cómo implemento un NSSplitView de 3 paneles con tamaños mínimo y máximo?

La disposición que quiero es la siguiente:

+----------+------------------+------------------------------------+ 
|   |     |         | 
|   |     |         | 
|   |     |         | 
|   |     |         | 
| Pane 1 |  Pane 2  |    Pane 3    | 
|   |     |         | 
|   |     |         | 
|   |     |         | 
|   |     |         | 
|   |     |         | 
+----------+------------------+------------------------------------+ 

Quiero poner en práctica las siguientes limitaciones para cada uno de los paneles:

  • Panel 1: 140pt mínimo. Máximo: 400pt.
  • Panel 2: 250pt mínimo.
  • Panel 3: Mínimo 400pt.

Cualquier puntero sería muy apreciado.

+1

Las vistas pueden ser jerárquicas por lo que podría considerar la posibilidad de dos niveles de la fracción de vista: uno en la parte superior con el "Panel de 3" a la derecha y una segunda fracción de vista de la izquierda (que contiene "Panel 1 "y" Panel 2 "). No lo he intentado, pero parece ser la forma más sencilla de hacer que esto funcione. –

+0

Gran tutorial aquí: http://www.youtube.com/watch?v=k3XLInzZIs8 – siekfried

Respuesta

0

Supongo que resolvió esto. De todos modos, hay dos formas. El primero es como la respuesta anterior, arrastre una vista dividida donde lo desee y arrastre una segunda vista dividida dentro de uno de los contenedores (subvista de la vista dividida). La vista hierarchie es como

Window 
Window containerview 
     Splitview 
      Containerview_left | containerview_right 
            Splitview 
             Containerview_left | containerview_right 

Si por código, a continuación, se crea un SplitView, añadirlo como una vista secundaria de la ventana, vista. Luego usted crea subvistas de vista dividida agregándolas usando [splitview addsubview] si agrega tres subvistas, tiene dos deviders. La jerarquía es diferente.

Window Window containerview 
     Splitview 
      Containerview_ind(0)| Containerview_ind(1) | Containerview_ind(2) 

Esto significa que, si desea encontrar una subvista, debe saber cómo la creó.

HTH

6

En realidad, HTH me inspiró a intentar una tercera posibilidad en Interface Builder, y resulta que trabajar muy bien. En particular, mover un separador no produce ningún cambio involuntario en otro lugar, lo que podría suceder fácilmente si anida las vistas divididas.

  • Añadir un NSSplitView a que la ventana,
  • Añadir un (una vista personalizada, en IB) NSView como un hijo de la vista dividida. Usted termina con una vista dividida que tiene tres, no dos, subvistas.

What it looks like in the IB Objects List

Lo mismo funciona si quieres añadir otro NSSplitView como un niño, a pesar de que lo tienes que tener cuidado de cómo las vistas divididas anidados se afectan entre sí. La imagen de arriba muestra cómo se vería en el constructor de interfaz, la segunda muestra el resultado en el simulador.

The result

7

para hacer cumplir un mínimo, echa un vistazo a la clase BESplitViewConstraintEnforcer utilidad que hemos creado.

Dicho sea de paso: si desea evitar el agrupamiento de vistas divididas y en su lugar agrega un panel adicional en Interface Builder, arrastre la nueva vista al objeto de vista dividida, como se muestra en la siguiente captura de pantalla.

Screenshot

Cuestiones relacionadas