2011-12-19 18 views
8

Pazarlama bilgilerini işleyen basit bir uygulamam var. Benim yaptığım kullanıcı File->Open menüsünde tıkladığındaBir Kakao uygulamasında sürüklenen dosyaları kabul etme

NSInteger result = [openPanel runModalForDirectory:nil file:nil types:fileTypes]; 

aramak oldu. Şimdi kullanıcıya sürükle-bırak yetenekleri eklemek istedim, bu sayede kullanıcı menüye gitmek zorunda kalmadan veya bir dosyayı açmak için + o komutuna basarak dosyayı bir dosyaya sürükleyebilir.

numaralı belgeye gitmeden önce belgeyi okuyun Zaten Apple'ın Intro to drag and drop ve diğer belgelerini kontrol ediyorum. Yine de ne yapacağımı anlayamıyorum.

Eski bir Unix C programcısıyım, bununla kopyalanması gereken bir şey var ve Apple'ın belgesindeki bazı varsayımlar bana mantıklı gelmiyor. Ben benim app eklemek gerekir ne Kısacası

:

  1. sürükle etkinleştirme ve bir not olarak dosyayı

sürüklenen

  • Kolu bırakın, sadece bir tane işlemesi gerektiğini bir seferde dosya. yardım

  • cevap

    15

    Eh için

    sayesinde, ben önceden okuduğunuz tahmin NSDraggingDestination protokolünü uygulamak gerekir. Bunu belirli bir görünümde veya tüm pencerede uygulayabilirsiniz - uygulama düzeyindeki dosya sürüklemelerini kabul ediyormuşsunuz gibi geliyor, bu nedenle tüm pencerenin sürüklemeyi kabul etmesini isteyebilirsiniz. Ne olursa olsun, onu bir kez çalıştırdığınızda, daha fazla nasıl özelleştireceğinizi göreceksiniz.

    Alt Sınıf NSWindow. İlk adım ilgi ne sürükler tür belirtmektir

    o dosya adları ilgilenen özel penceresini söyle:.

    - (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender { 
        return NSDragOperationCopy; 
    } 
    
    - (NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)sender { 
        return NSDragOperationCopy; 
    } 
    
    : imlecin ne tür ekranına

    - (void)awakeFromNib { 
        [self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]]; 
    } 
    

    Tell OS X

    - (BOOL)performDragOperation:(id<NSDraggingInfo>)sender { 
        NSPasteboard *pboard = [sender draggingPasteboard]; 
        NSArray *filenames = [pboard propertyListForType:NSFilenamesPboardType]; 
    
        if (1 == filenames.count) 
         if ([[NSApp delegate] respondsToSelector:@selector(application:openFile:)]) 
          return [[NSApp delegate] application:NSApp openFile:[filenames lastObject]]; 
    
        return NO; 
    } 
    

    Bu çalışma bunu elde etmek yürütmem:

    sürükle yapın.

    +0

    Tamam, bilgi için teşekkürler. Ben [self registerForDraggedTypes: [NSArray arrayWithObject: NSFilenamesPboardType]]; 'awakeFromNib için bir istisna alıyorum ve: *** yakalanmamış istisna 'NSInvalidArgumentException' nedeniyle nedeni sonlandırma, nedeni: '- [MyAppAppDelegate registerForDraggedTypes:] : 0x100141330 ' –

    +0

    Oh örneğine gönderilen tanınmayan seçici, ayrıca '[self registerForDraggedTypes: [NSArray arrayWithObject: NSFilenamesPboardType]] ekleyerek, bana bir uyarı verir: Yöntem -registerForDraggedTypes bulunamadı –

    +0

    Bu yöntemi pencerede çağırmanız gerekir veya sürükleniyor. NSWindow alt sınıfımda 'awakeFromNib' penceresinden onu aramayı tercih ediyorum. –

    İlgili konular