簡體   English   中英

NSTextView拖放-放置后不可見的字符

[英]NSTextView Drag & Drop — Characters not visible after drop

我將NSTextView子類NSTextView以便可以刪除文件並將文件的字符串內容復制到視圖中(與將文件路徑拖放到視圖中的標准實現相反)。 該文本似乎正確刪除,但是刪除后不可見。 我可以看到光標已經移動,甚至可以將拖放的文本復制到視圖之外並粘貼到例如TextEdit中。 我嘗試在-performDragOperation:方法的末尾添加[self setNeedsDisplay:YES] ,但是行為沒有改變。

這是我到目前為止編寫的代碼。 我想這不是實現此目標的最佳方法。 我是在可可中拖放實現的新手。

-(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;

}

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

刪除存根后,所有操作均按預期進行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM