2010-11-21 24 views

Respuesta

6

en realidad no han intentado hacer esto - y puede haber mejores maneras de hacerlo - pero esto debería funcionar:

NSView* superview = [view superview]; 
[view removeFromSuperview]; 
[superview addSubview:view]; 

Esto moverá 'vista' a la parte delantera de sus hermanos

+0

Probablemente ineficiente, pero logra lo que yo quería, así que gracias. – Regan

+0

Puede valer la pena investigar usando el método 'setSubviews:' en su lugar. – ArtOfWarfare

0

Las vistas de hermanos que se superponen pueden ser difíciles de hacer funcionar correctamente en AppKit: no fue compatible por mucho tiempo. Considere hacerlos CALayers en su lugar. Como beneficio adicional, puede reutilizar este código en su versión de iOS.

0

También asegúrese de activar la capa para la representación de cuarzo:

... 
NSImageView *anImage = [[NSImageView alloc] initWithFrame:NSRectMake(0,0,512,512)]; 
[anImageView setWantsLayer:YES]; 
... 

lo contrario, su capa no se puede representar correctamente.

0

La respuesta de Pete Rossi funciona, pero recuerda conservar la vista cuando la elimines de la supervista.

Puede agregar esto en una categoría en NSView:

-(void)bringSubviewToFront:(NSView*)view 
{ 
    [view retain]; 
    [view removeFromSuperview]; 
    [self addSubview:view]; 
    [view release]; 
} 
5

respuesta de Pete Rossi no funcionó para mí porque necesitaba hacer estallar la la vista al frente al arrastrar con el ratón. Sin embargo, a lo largo de las mismas líneas de la siguiente hizo el trabajo sin matar el ratón:

CALayer* superlayer = [[view layer] superlayer]; 
[[view layer] removeFromSuperlayer]; 
[superlayer addSublayer:[view layer]]; 

Además, la continuación presta en una subclase NSView o categoría es bastante práctico:

- (void) bringToFront { 
    CALayer* superlayer = [[self layer] superlayer]; 
    [[self layer] removeFromSuperlayer]; 
    [superlayer addSublayer:[self layer]]; 
} 
+0

¡Perfecto! Justo lo que necesitaba, gracias. –

0

Esta es la solución de Swift 3.0:

extension NSView { 
    public func bringToFront() { 
     let superlayer = self.layer?.superlayer 
     self.layer?.removeFromSuperlayer() 
     superlayer?.addSublayer(self.layer!) 
    } 
}