6
votes

NSTableView: contour bleu sur des rangées cliquées par le bouton droit

Je me demande comment je peux vous débarrasser des grandes lignes que cacao tire autour des lignes dans NSTableView / NSoutLLeView lorsque vous cliquez sur eux à la souris sur elles.

Contour NstableView http://tobidobi.com/nstableview_outline.png

Il ne semble pas être un "point fort" classique ni un "bague de mise au point" si je ne me trompe pas - alors, qu'est-ce que c'est, en fait?

Je dessine actuellement des nscells personnalisés complètement moi-même - mais je ne peux pas comprendre comment * Dessinez ce contour par moi-même, ou de
* Enlevez-vous de cela, ou de
* au moins changer sa couleur

Les notes sont les bienvenues! Merci!


0 commentaires

3 Réponses :


13
votes

Malheureusement, je ne suis pas au courant d'une façon documentée de le faire, écrit de votre propre remplacement de la vue de table.

La méthode de remplacement est la suivante: p>

- (void)drawContextMenuHighlightForRow:(NSInteger)row;


3 commentaires

Merci, je ne faisais pas de cacao 64 bits pendant un moment.


C'est une API sans papiers. S'il vous plaît dire temps qu'il passera le processus de révision Mac App Store?


Non, généralement, cela ne passera pas de critique Mac App Store. (J'ai posté cette réponse avant l'existence de l'App Store Mac, de sorte que ce n'était pas un problème alors!)



2
votes

My NSTableView * MaintableView n'est pas sous-classé, donc je me suis débarrassé de celui-ci juste avant que le menu contextuel ne s'ouvre:

- (void)menuWillOpen:(NSMenu *)menu{
     NSInteger rightClicked = [mainTableView clickedRow];
     [mainTableView selectRowIndexes:[NSIndexSet indexSetWithIndex:rightClicked] byExtendingSelection:NO];
     [mainTableView deselectRow: rightClicked];
     [mainTableView reloadData];
    {


1 commentaires

Reloaderdata est inutile, mais c'est la voie à suivre.



0
votes

Voici ma tentative de ré-dessiner ces contours:

import Cocoa

class TemplateOutlineView: NSOutlineView {
    
    private static let focusLineWidth: CGFloat = 2.0
    private static let focusLineColor = NSColor.controlAccentColor
    
    @objc
    func drawContextMenuHighlightForRow(_ row: Int) {
        guard !inLiveResize else { return }
        guard let ctx = NSGraphicsContext.current?.cgContext else { return }
        let rects = [CGRect](arrayLiteral: rect(ofRow: row))
        
        ctx.setLineWidth(TemplateOutlineView.focusLineWidth)
        ctx.setStrokeColor(TemplateOutlineView.focusLineColor.cgColor)
        
        let outerRect = bounds
            .insetBy(dx: 0.0, dy: 0.5)
            .offsetBy(dx: 0.0, dy: 0.5)
        for rect in rects.filter({ outerRect.intersects($0) }) {
            let innerRect = rect.intersection(outerRect)
            if innerRect.height > rect.height + 2.0 {
                ctx.addRect(innerRect
                                .insetBy(dx: TemplateOutlineView.focusLineWidth, dy: TemplateOutlineView.focusLineWidth + 0.5)
                                .offsetBy(dx: 0.0, dy: -0.5)
                )
            } else {
                ctx.addRect(rect
                                .insetBy(dx: TemplateOutlineView.focusLineWidth, dy: TemplateOutlineView.focusLineWidth + 0.5)
                                .offsetBy(dx: 0.0, dy: -0.5)
                )
            }
        }
        
        ctx.strokePath()
    }
    
}


0 commentaires