2011-12-20 59 views
1

我已經創建了子類NSTextView,這樣我就可以刪除文件並將文件的字符串內容複製到視圖中(與將文件路徑放入風景)。文本似乎正在丟失,但在丟棄後不可見。我可以看到光標已移動,甚至可以將刪除的文本複製到視圖外並粘貼到例如TextEdit中。我嘗試在我的-performDragOperation:方法的末尾添加[self setNeedsDisplay:YES],但行爲沒有改變。NSTextView拖放 - 刪除後字符不可見

這是我迄今爲止編寫的代碼。我想這不是實現這一點的最佳方式。我是新來的可可拖放實現。

-(NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender { 

    NSPasteboard *pb = [sender draggingPasteboard]; 
    NSDragOperation dragOperation = [sender draggingSourceOperationMask]; 

    if ([[pb types] containsObject:NSFilenamesPboardType]) { 
     if (dragOperation & NSDragOperationCopy) { 
      return NSDragOperationCopy; 
     } 
    } 
    if ([[pb types] containsObject:NSPasteboardTypeString]) { 
     if (dragOperation & NSDragOperationCopy) { 
      return NSDragOperationCopy; 
     } 
    } 

    return NSDragOperationNone; 

} 


-(BOOL)performDragOperation:(id<NSDraggingInfo>)sender { 

    NSPasteboard *pb = [sender draggingPasteboard]; 

    if ([[pb types] containsObject:NSFilenamesPboardType]) { 
     NSArray *filenames = [pb propertyListForType:NSFilenamesPboardType]; 

     for (NSString *filename in filenames) { 
      NSStringEncoding encoding; 
      NSError * error; 
      NSString * fileContents = [NSString stringWithContentsOfFile:filename usedEncoding:&encoding error:&error]; 
      if (error) { 
       // handle error 
      } 
      else { 
       [self setString:fileContents]; 
      } 
     } 

    } 

    else if ([[pb types] containsObject:NSPasteboardTypeString]) { 
     NSString *draggedString = [pb stringForType:NSPasteboardTypeString]; 
     [self setString:draggedString]; 
    } 

    return YES; 

} 

回答

0

我有一個存根-drawRect:沒有實現。

刪除存根後,一切都按預期工作。