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. p>
Contour NstableView http://tobidobi.com/nstableview_outline.png P>
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? p>
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 p>
Les notes sont les bienvenues! Merci! P>
3 Réponses :
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;
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!)
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];
{
Reloaderdata est inutile, mais c'est la voie à suivre.
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()
}
}