2011-05-05 14 views
7

Ben böyle init yönteminde sürükleme dosyaları için kaydeder bir NSView alt sınıf:Kakao NSView Subview engelleme sürükle/bırak

[self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]]; 

Ben bu görüşe bir subview eklerseniz sürükle bırak mükemmel çalışıyor, ancak Tam olarak aynı çerçeve, artık çalışmıyor. Tahminim, alt görüntünün, süper görünüme gitmek için sürükleme olayını engellemesidir. Bunu önleyebilir miyim? Teşekkürler

Ayrıca, iki soru sorduğumu biliyorum, ancak bunun için yeni bir konu oluşturmak istemiyorum: Sürüklerken, imlecim diğerleriyle olduğu gibi "+" işaretine dönüşmez sürükler, bunu nasıl yapabilirim? Tekrar teşekkürler.

GÜNCELLEME: İşte bu benim IB kurdunuz nasıl: enter image description here

DrawView ben draggedtypes kaydolduğum bahsettiği özel sınıftır.

- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender { 
    return NSDragOperationCopy; 
} 

- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender { 
    NSPasteboard *pboard; 
    pboard = [sender draggingPasteboard]; 
    NSArray *list = [pboard propertyListForType:NSFilenamesPboardType]; 
    if ([list count] == 1) { 
     BOOL isDirectory = NO; 
     NSString *fileName = [list objectAtIndex:0]; 
     [[NSFileManager defaultManager] fileExistsAtPath:fileName 
              isDirectory: &isDirectory]; 
     if (isDirectory) { 
      NSLog(@"AHH YEA"); 
     } else { 
      NSLog(@"NOO"); 
     } 
    } 
    return YES; 
} 
+0

alt çizimini nasıl oluşturacağınız alt sınıfını nasıl oluşturmalısınız? IB aracılığıyla veya program aracılığıyla oluşturulmuş bir alt görünüme sahip bir görünüme sürüklenebiliyorum. –

+0

IB'de ayarlanmış görünümüm var. Bu sınıfı, yukarıda anlattığım özel sınıfa ayarladım. Daha sonra IB'de, bir görüntüyü sürükleyip o görünümün içine koyarım (onu bir alt görünüm yapın). Bunu yaptığımda sürükleme durur. Teşekkürler. – user635064

+0

Daha fazla ayrıntı sağlayan orijinal soru güncellendi. Teşekkürler. – user635064

cevap

4

Sorunuzun ikinci kısmına cevap şudur: Ve Resim görünümü basit bir Subview, ben Eğer yardımı olacaksa, burada DragView benim alakalı kod ... medya bölümünden bir görüntü sürükledi :

- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender{ 
    return NSDragOperationCopy; 
} 

Eğer NSDragOperationCopy dönerseniz, bir kopyalama işlemi için fare rozet almak. (Tabi ki, NSDragOperationCopy koşulsuz koşulsuz olarak geri dönüp, yapamazsınız; bunları kabul edip edemeyeceğinizi görmek için çalışma alanındaki nesneleri kontrol edin.)

Sorunun ilk bölümüne verilen cevabın ne olduğundan emin değilim. Çünkü alt görüntü engelleme efektini yeniden oluşturamıyorum.

Pekala, cevap maalesef yapamazsınız. Sürüklediğiniz resim bir NSImageView ve NSImageView s sürükleme olaylarını kabul eder, bu yüzden sürükleme olayını yakalar ve onunla hiçbir şey yapmaz. Alt görünümünüz özel bir sınıfsa, a) sürükle ve bırak işlemlerini uygulayamazsınız; bu durumda, sürüklemeleri'u geçirir; b) alt görünüm için sürüklemeleri kabul etmek için sürükle ve bırak uygulamasını uygulayın. Bu durumda, üzerinde kontrolünüz olmayan bir sınıf kullanıyorsunuz. Yapmanız gereken tek şey bir görüntüyü görüntülüyse, başka hiçbir şey yapmadan drawRect:

+0

Giriş için teşekkürler, mükemmel bir şekilde çalıştı. Ana sorum, ilk soru oldu, neden kabul edildi olarak işaretlemediğimi, ancak yukarı atıyorum. Tekrar teşekkürler. – user635064

+0

Bu detaylarla cevabınızın geri kalanı var. İyi şanslar, teşekkür için teşekkürler! –

+0

Netleştirmek için çok teşekkürler! – user635064