Benutzerdefinierter Einfügepunkt für NSTextView

8

Ich ändere die Größe des Einfügepunkts, indem ich -(void)drawInsertionPointInRect:(NSRect)aRect color:(NSColor *)aColor turnedOn:(BOOL)flag überschreibe, aber es behandelt nicht das erste Blinzeln (wenn Sie den Einfügepunkt verschieben, wird es wieder normal)

Ich habe es geschafft, mit dem ersten Blinzeln fertig zu werden, indem ich die private Methode - (void)_drawInsertionPointInRect:(NSRect)aRect color:(NSColor *)aColor außer Kraft setzte.

Aber das ist keine Lösung für mich, da das Überschreiben der privaten Methode dazu führt, dass der App Store ablehnt. Ich möchte, dass die App im App Store verfügbar ist. Ich sehe Apps wie iAWriter und Writeroom haben einen benutzerdefinierten Einfügepunkt und sie sind im App Store.

Weiß jemand, wie es ihnen gelungen ist, dies zu tun, oder besser, als die private Methode zu überschreiben?

Danke.

%Vor%     
Jensen 26.03.2013, 21:36
quelle

2 Antworten

6

Das Problem ist der Beschneidungspfad, der wirksam ist, wenn drawInsertionPointInRect aufgerufen wird.

%Vor%

Beachten Sie, dass der obige Code Artefakte zurücklässt (in meinen Tests wird drawInsertionPointInRect nicht aufgerufen, um den Einfügepunkt zu löschen, nur um ihn zu zeichnen). Verwenden Sie setDrawsBackground: YES für eine schnelle und dreckige Art, die Artefakte zu löschen.

    
Sam Jacobson 18.07.2014 11:12
quelle
0

Ich mache keinen App Store, aber ich frage mich, ob dieser "knifflige" kleine Hack einen undokumentierten Anruf unter Apples Radar fliegen lassen würde. Im Grunde haben Sie eine harmlos benannte Methode, die die Arbeit des überschriebenen undokumentierten Aufrufs implementiert. Dann verwenden Sie die Obj-C-Laufzeit, um Ihre Implementierung in die undokumentierte zu tauschen. Sie ROT-13 die SELs, so dass textuelle Analyse nirgends den undokumentierten Methodennamen sehen wird. Ich weiß nicht, ob Apple das fangen würde oder nicht!

Weiß nicht, ob das hilft, aber ich dachte, es wäre ein bisschen Spaß.

(Ich kenne dort weit schnellere und klügere Wege, ROT-13 in Obj-C zu machen, als meine einmalige Implementierung unten.)

%Vor%     
K8TIY 14.03.2014 22:08
quelle