10
votes

Version OS X de BringsbueViewtofront :?

Je dois reproduire la fonction de Bringsbieviefront: sur l'iPhone, mais je programmment sur le Mac. Comment cela peut-il être fait?


0 commentaires

6 Réponses :


8
votes

n'avez pas vraiment essayé cela - et il peut y avoir de meilleurs moyens de le faire - mais cela devrait fonctionner:

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


2 commentaires

Probablement inefficace, mais cela accomplit ce que je voulais, alors merci.


Il peut être intéressant d'enquêter sur l'utilisation de la méthode setsubviews: à la place.



0
votes

Des vues sur les frères et sœurs qui se chevauchent peuvent être difficiles à faire du travail dans APPKIT-C'était complètement non pris en charge pendant une longue période. Envisagez de les faire des calaises à la place. En tant que bonus, vous pourrez peut-être réutiliser ce code dans votre version iOS.


0 commentaires

1
votes

Assurez-vous également de activer la couche de rendu de quartz: xxx

sinon, votre couche ne peut pas être rendue correctement.


0 commentaires

0
votes

La réponse de Pete Rossi fonctionne, mais n'oubliez pas de conserver la vue lorsque vous le supprimez de SuperView.

Vous pouvez ajouter ceci dans une catégorie sur Nsview: p>

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


0 commentaires

6
votes

La réponse de Pete Rossi n'a pas fonctionné pour moi parce que j'avais besoin de faire apparaître la vue à l'avant lors de la glisser avec la souris. Cependant, dans les mêmes lignes, les mêmes lignes ont fonctionné sans tuer la souris:

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


1 commentaires

Je suis venu chercher la solution à cela et, sauf un kerfuffle parce que ma vue d'hébergement n'était pas sauvegardée, cela a fonctionné un régal. Merci de le partager.



0
votes

Ceci est SWIFT 3.0 Solution:

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


0 commentaires