2010-01-10 20 views
5

Estoy intentando escribir un código absolutamente barebones donde puedo arrastrar un archivo 'dot.txt' simple a una NSWindow y leer los datos (y nada más elegante que eso), pero todos los ejemplos que he podido encontrar usan imágenes y NSViews, etc. La sección "Arrastrando el contenido del archivo" de Apple en su documentación "Arrastrar y soltar temas de programación para el cacao" confirma que arrastrar a un plano NSWindow (en lugar de en un NSView, etc.) es posible y parece discutir exactamente lo que estoy tratando de hacer, pero como un relativamente novato todavía me parece confusa su referencia a imágenes y marcos.Cómo arrastrar y soltar un archivo '.txt' en obj-c

¿Alguien puede ayudarme a empezar mostrándome dónde 'registrarParaDraggedTypes' además de ponerlo en, por ejemplo, un método 'initWithFrame' o 'initWithCoder', y qué tipos registrar? Una vez que obtengo la ventana para reconocer mi arrastre, puedo preocuparme por las otras cosas 'performDragOperation' y 'draggingEntered' más tarde.

Gracias :-)

Respuesta

6

Ésta es una parte de código que estoy trabajando. Puede encontrar este método cuando creó un nuevo proyecto.

-(void)applicationDidFinishLaunching:(NSNotification*)aNotification 
{  
    [window registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]]; 
} 

Soy newbie too. De todos modos, esto funcionó para mí.

Y luego, esto es importante. Tenemos que conectar este objeto a la ventana objeto para manejar los mensajes de soltar en este objeto

Abra MainMenu.xib, y se creará Interface Builder. En Interface Builder, conecte 'App Delegate' (este objeto) para 'delegar' la salida de 'Window'. (Puede encontrar la salida de 'delegado' en el panel Inspector) Ahora, 'Delegado de aplicación' recibe mensajes de evento de 'Ventana'.

Y luego, añade más método en el mismo archivo de clase:

-(NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender 
{ 
    return NSDragOperationGeneric; 
} 
-(BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender 
{ 
    NSPasteboard* pbrd = [sender draggingPasteboard]; 
    // Do something here. 
    return YES; 
} 
+0

Esto está bien para el caso concreto de que usted tiene un delegado de aplicación que tiene una salida de 'window', pero normalmente una ventana sería administrado por un 'NSWindowController' y registrarías los tipos de arrastre en el método' -windowDidLoad' del controlador de ventana. La respuesta es correcta en general sin embargo. –