7
votes

Comment changer la couleur du diviseur dans NssplitView?

Pouvons-nous changer la couleur du diviseur? Documentations Apple dit que nous pouvons remplacer -DivIDerColor à la sous-classe de NssplitView pour cela, mais cela ne fonctionne pas pour moi, ou ma compréhension n'est pas correcte. Aussi, j'ai essayé de créer une couche de couleur sur le diviseur, E.g.:

colorLayer = [CALayer layer];
NSRect dividerFrame = NSMakeRect([[self.subviews objectAtIndex:0] frame].size.width, [[self.subviews objectAtIndex:0] frame].origin.y, [self dividerThickness], self.frame.size.height);

[colorLayer setBackgroundColor:[color coreGraphicsColorWithAlfa:1]];
[colorLayer setFrame:NSRectToCGRect(dividerFrame)];

[self.layer addSublayer:colorLayer];


0 commentaires

6 Réponses :


7
votes

J'ai essayé le sous-classement - (vide) diviseur "/ code> aussi et je ne sais pas pourquoi cela ne fonctionne pas même si je sais que c'est appelé (et c'est dans la documentation).

Une façon de changer la couleur du diviseur consiste à la sous-classe - (vide) DrawdividerInrect: (nsrect) arect . Cependant, pour une raison quelconque, cette méthode n'est pas appelée et j'ai vérifié partout sur le Web pour les réponses, mais je n'ai rien pu trouver, alors j'ai fini par l'appeler à partir de Drawrect code>. Voici le code de la sous-classement NSSPLITVIEW: P>

-(void) drawRect {
    id topView = [[self subviews] objectAtIndex:0];
    NSRect topViewFrameRect = [topView frame];
    [self drawDividerInRect:NSMakeRect(topViewFrameRect.origin.x, topViewFrameRect.size.height, topViewFrameRect.size.width, [self dividerThickness] )];
}

-(void) drawDividerInRect:(NSRect)aRect {
    [[NSColor redColor] set];
    NSRectFill(aRect);
}


0 commentaires

8
votes

En réalité, sous-classement NSSPLITVIEW et remplacement - (VOID) Diviseur "/ code> fonctionne, mais ne fonctionne que pour le diviseur mince ou épais.

J'ai créé de simples fentes configurables Voir comme ceci: xxx

puis dans l'interface Builder Spécifier la classe personnalisée pour votre vision Split pour être CentreyPlitView et Ajouter un nouvel attribut d'exécution défini par l'utilisateur avec le chemin de clés = DiviseurColor, type = couleur et sélectionnez la couleur séparateur souhaitée.


0 commentaires

0
votes

Un point important que je n'ai pas vu mentionné nulle part est que si vous tracez sur une vue sur une vue divisée, vous devez appeler Super - sinon DrawIViderIrect: n'est jamais appelé. Donc, cela devrait aller quelque chose comme ceci: xxx


0 commentaires

9
votes

Cette réponse peut être en retard mais:
Si vous utilisez Interface Builder, il est possible de modifier la propriété en allant à l'inspecteur d'identité du NssplitView ( cmd + alt + < Code> 3 ) et ajout d'un attribut d'exécution défini par l'utilisateur pour diviseurColor de la couleur type.


1 commentaires

C'est bien. N'a pas réalisé que c'était possible.



5
votes

Basé sur la réponse de la Palle, mais avec la possibilité de modifier la couleur de manière dynamique en code, je suis actuellement en train d'utiliser cette solution (Swift 4): xxx pré>

si votre contrôle de SplitView fait partie de NSSPLITVIEWCONTROLLER, vous devez utiliser quelque chose comme ceci: P>

splitViewController?.splitView.setValue(NSColor.red, forKey: "dividerColor")


3 commentaires

À partir de MacOS 11, cela ne semble pas fonctionner plus longtemps, pas sûr s'il s'agit d'un bogue ou non.


@CGIACOMI Je viens de tester cela sur MacOS 11, et cela fonctionne toujours de mon côté. Assurez-vous d'appeler le code dans WindowDidload, après la charge de SplitViewController.


J'ai fini par sous-classement le NSSPLITView et il suffit de remplacer le drawdivider (). Mais TNX pour votre réponse, j'avais suscité votre réponse et je l'ai maintenant fait avec votre commentaire aussi parce qu'ils m'ont vraiment aidé. Mais au moins pour moi, il semble que seuls les travaux de sous-classement. TNX à nouveau pour votre aide.



2
votes

dans Swift et sur MacOS 11, j'ai pu atteindre ce problème en sous-classant simplement le NSSPlitView et que vous remplacez uniquement le drawdivider ()

import Foundation
import AppKit

class MainSplitView: NSSplitView {
    override func drawDivider(in rect: NSRect) {
        NSColor(named: "separatorLinesColor")?.setFill()
        rect.fill()
    }
}


0 commentaires