Il progetto di esempio Finder Icon Overlay rappresenta un esempio piccolo e molto semplice ma effettivamente funzionante della risposta seguente.
https://github.com/lesnie/Finder-Icon-Overlay
So che questo è così vecchio, ma alcuni possono essere ancora interessati a tema (?)
Ecco quello che ho fatto è sotto Leopard (10.6). All'inizio sono necessarie le intestazioni di Finder appropriate. Usa lo strumento dump di classe per ottenerlo. Quindi scrivi il tuo codice come plugin SIMBL (consulta la documentazione su come farlo), procedendo con alcuni metodi. Ad esempio per disegnare qualcosa su un'icona in ListView, drawIconWithFrame: il metodo del metodo TIconAndTextCell deve essere sovrascritto.
Ecco il codice per il metodo swizzling:
+ (void) Plugin_load
{
Method old, new;
Class self_class = [self class];
Class finder_class = [objc_getClass("TIconAndTextCell") class];
class_addMethod(finder_class, @selector(FT_drawIconWithFrame:),
class_getMethodImplementation(self_class, @selector(FT_drawIconWithFrame:)),"[email protected]:{CGRect={CGPoint=dd}{CGSize=dd}}");
old = class_getInstanceMethod(finder_class, @selector(drawIconWithFrame:));
new = class_getInstanceMethod(finder_class, @selector(FT_drawIconWithFrame:));
method_exchangeImplementations(old, new);
}
sto prevalente "drawIconWithFrame:" il metodo con il mio metodo "FT_drawIconWithFrame:". Di seguito è riportata l'implementazione di esempio per questo metodo.
- (void) FT_drawIconWithFrame:(struct CGRect)arg1
{
[self FT_drawIconWithFrame:arg1];
if ([self respondsToSelector:@selector(node)]) {
if ([[[[NSClassFromString(@"FINode") nodeWithFENode:[(TNodeIconAndNameCell *)self node]] fullPath] lastPathComponent] hasPrefix:@"A"])
[myPrettyIconOverlayImage drawInRect:NSMakeRect(arg1.origin.x, arg1.origin.y, arg1.size.height, arg1.size.height) fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
}
}
Essenzialmente si disegna "myPrettyIconOverlayImage" su ogni icona per il file con il nome del file inizia con la lettera "A". Questa logica dipende da te.
Prestare attenzione a questa riga: [self FT_drawIconWithFrame:arg1];
questo è come chiamare 'super' per ottenere normale icona e nome ecc. Lo so, sembra strano, come il ciclo, ma in realtà non lo è. Quindi connettiti al plugin SIMBL, installa SIMBL e ... esegui.
A causa di modifiche in Lion, alcuni lavori devono essere eseguiti da zero (creare un nuovo file "Finder.h" con tutte le dichiarazioni necessarie in esso, trovare classi e metodi appropriati per l'override), ma questa tecnica funziona ancora.
Happy hacking!
E 'stato un po' di tempo da questo post, con 10.6 prontamente disponibili. Hai raggiunto ciò che stavi cercando? Sei andato con le tattiche del plugin Finder? – epologee
Qualche aggiornamento su questo per leone? – Tony
@LesNie sotto link al suo progetto [Finder Icon Overlay] (https://github.com/lesnie/Finder-Icon-Overlay). Collegamento nel caso in cui qualcun altro abbia difficoltà nel trovare un esempio di plugin per OS X Finder open source (come ho fatto io). – pkamb