NSTextView Drag&丢弃 - 丢弃后不可见的字符

时间:2011-12-20 16:21:22

标签: objective-c cocoa nstextview

我是NSTextView的子类,因此我可以删除文件并将文件的字符串内容复制到视图中(而不是将文件路径放入视图的标准实现)。文本似乎正在正确删除,但在删除后不可见。我可以看到光标已移动,甚至可以将删除的文本复制出视图并粘贴到例如TextEdit中。我尝试在[self setNeedsDisplay:YES]方法的末尾添加-performDragOperation:,但行为没有改变。

这是我到目前为止编写的代码。我想这不是实现这个的最好方法。我是新手,可以在cocoa中拖放实现。

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

}

1 个答案:

答案 0 :(得分:0)

我有-drawRect:的存根没有实现。

删除存根后,一切都按预期工作。