2009-04-29 6 views
0

Ich habe eine NSCell-Unterklasse, die alle Arten von benutzerdefinierten Zeichnungen enthält. Das einzige Mal, als ob die Dinge völlig außerhalb meiner Kontrolle liegen, ist das Rechtsklicken auf eine Zelle, um das zugehörige Kontextmenü anzuzeigen. Während sie ihr Kontextmenü anzeigt, zeichnet die Tabelle (oder Zelle - nicht sicher, was genau das tut) einen Fokus-Rect. Ich würde das gerne loswerden oder zumindest einen Weg finden, meine eigene Version davon zu zeichnen, die besser in meine Oberfläche passt.Das Fokus-Rect auf einem NSCell loswerden. Wird nur angezeigt, wenn ich mit der rechten Maustaste klicke.

Ich habe über 15 verschiedene Methoden versucht, die scheinen, wie sie könnte mir über diese Fokussteuerung gibt sie (verschiedene Ersthelfer Methoden, verschiedene Zeichenmethoden, verschiedene Highlight-Color-Verfahren, etc.) rect zeichnen, aber ich haben noch etwas zu finden, das irgendetwas daran ändert.

Screenshot des Problems: http://twitpic.com/3zx2t

Ich bin fast ärgerlich genug, um Klasse-dump AppKit und versuche, was private Methode zu finden, es diesen lästigen Fokus rect zu zeichnen ist verwenden. Nichts anderes, was ich tue, hat irgendeinen Einfluss darauf. Jede Hilfe hier würde wirklich meine geistige Gesundheit und viel zukünftiges Haarziehen retten.

Vielen Dank!

Antwort

2

Ohne die Tabelle -drawRect: vollständig überschreiben dies ist die einzige andere Weise, die ich weiß, um das Kontextmenü highlight rect loszuwerden.

Dies ist die Methode, die mindestens in Leopard verwendet wird, um die Hervorhebung um Zellen zu zeichnen, die über ein Kontextmenü aktiviert werden. Es wird leider direkt von NSTableView 's -drawRect: Methode aufgerufen und, soweit ich weiß, gibt es keine andere Möglichkeit, Ihr Desinteresse zu signalisieren, dass diese Highlights gezeichnet werden.

Natürlich ist dies private API, es funktioniert möglicherweise nicht mehr in Snow Leopard oder einer anderen Version. Aber im schlimmsten Fall bedeutet das, dass irgendwo auf dem Weg die Hervorhebung des Kontextmenüs in Ihren Programmen auf neueren Releases oder anderen Funktionen, die diese Methode verwenden, später möglicherweise nicht mehr funktioniert. Sie wurden gewarnt.

0

Am 10.5 und später NSTableView können Sie in der Tabelle ein Kontextmenü auf ein beliebiges Element bringen (das heißt, ohne die Nebenwirkung, die die Auswahl zu ändern.)

Es zieht, dass ‚Fokus rect‘ um anzugeben, auf welche Elemente das Kontextmenu wirkt.

+0

Ich verstehe - jetzt wie kann ich die Zeichnung davon entfernen/kontrollieren? –

+0

Es gibt keine API, um dieses Verhalten zu steuern, nur SPI mit den Standardvorbehalten. Der Standardindikator gibt dem Benutzer eine wertvolle Rückmeldung darüber, welche Elemente von der Auswahl des Kontextmenüs betroffen sein werden. Wenn Sie es entfernen, sollten Sie ein alternatives Feedback an die Benutzer senden, um zu wissen, welche Elemente anvisiert werden. –

Verwandte Themen