seguidores populares para hashtags generador español conseguir cocoa nsview

cocoa - populares - hashtags en español



¿Cómo hago para mover NSView al frente de todos los NSViews? (7)

Tengo una súper vista, que tiene 2 subvistas. Estas subvistas están superpuestas.

Cada vez que elijo una vista desde un menú, la vista correspondiente debe convertirse en la vista frontal y manejar las acciones. es decir, debería ser la subvista más frontal.

acceptsFirstResponder renuncia a todo el trabajo bien. Pero los eventos del mouse hacia abajo se envían a la subvista superior que se configuró.

Saludos, Dhana


Aquí hay otra forma de lograr esto que es un poco más clara y sucinta:

[viewToBeMadeForemost removeFromSuperview]; [self addSubview:viewToBeMadeForemost positioned:NSWindowAbove relativeTo:nil];

Según la documentación de este método, cuando utiliza relativeTo:nil la vista se agrega arriba (o debajo, con NSWindowBelow ) a todos sus hermanos.


El siguiente código debería funcionar bien ...

NSMutableArray *subvies = [NSMutableArray arrayWithArray:[self subviews]];//Get all subviews.. [viewToBeMadeForemost retain]; //Retain the view to be made top view.. [subvies removeObject:viewToBeMadeForemost];//remove it from array [subvies addObject:viewToBeMadeForemost];//add as last item [self setSubviews:subvies];//set the new array..


Otra forma es utilizar el método sortSubviewsUsingFunction: context: de NSView para reordenar una colección de vistas de hermanos a su gusto. Por ejemplo, defina su función de comparación:

static NSComparisonResult myCustomViewAboveSiblingViewsComparator( NSView * view1, NSView * view2, void * context ) { if ([view1 isKindOfClass:[MyCustomView class]]) return NSOrderedDescending; else if ([view2 isKindOfClass:[MyCustomView class]]) return NSOrderedAscending; return NSOrderedSame; }

Luego, cuando desee asegurarse de que su vista personalizada permanezca por encima de todas las vistas de hermanos, envíe este mensaje a la supervista de su vista personalizada:

[[myCustomView superview] sortSubviewsUsingFunction:myCustomViewAboveSiblingViewsComparator context:NULL];

Alternativamente, puede mover este código a la supervista en sí, y enviar el mensaje sortSubviewsUsingFunction: context: a self en su lugar.


Para mover una vista al frente, debe colocarse como el último elemento en la matriz de subvistas. Aquí hay una solución de Swift 3.0:

func bringChildToFrontWith(viewIdentifier: Int) { var subViewArray = self.subviews // Apple docs recommend copying subViews array before operating on it, as it "can be changed at any time" for ix in 0 ..< subViewArray.count { if let childView = subViewArray[ix] as? MyViewSubClass { if childView.myViewSubClassIdentifier == viewIdentifier { let topItem = subViewArray[ix]; subViewArray.remove(at: ix) subViewArray.append(topItem) self.contentView.subviews = subViewArray } } } }


Pude hacer que esto funcionara sin llamar a removeFromSuperView

// pop to top [self addSubview:viewToBeMadeForemost positioned:NSWindowAbove relativeTo:nil];


Puede intentar esto:

[viewToBeMadeFirst.window makeKeyAndOrderFront:nil];


Puede lograr esto simplemente agregando la vista nuevamente; no creará otra instancia de esto.

[self addSubview:viewToBeMadeForemost];

Puede registrar el número de subvistas antes y después de que se ejecute esta línea de código.