Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSTextView拖放--拖放后字符不可见_Objective C_Cocoa_Nstextview - Fatal编程技术网

Objective c NSTextView拖放--拖放后字符不可见

Objective c NSTextView拖放--拖放后字符不可见,objective-c,cocoa,nstextview,Objective C,Cocoa,Nstextview,我已经对NSTextView进行了子类化,这样我就可以删除一个文件并将文件的字符串内容复制到视图中,而不是将文件路径删除到视图中的标准实现。文本似乎正确放置,但放置后不可见。我可以看到光标已经移动,甚至可以将删除的文本复制出视图并粘贴到例如TextEdit中。我尝试在-performDragOperation:方法的末尾添加[self-setNeedsDisplay:YES],但行为没有改变 这是我到目前为止写的代码。我想这不是实现这一目标的最佳方式。我不熟悉cocoa中的拖放实现 -(NSDr

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

这是我到目前为止写的代码。我想这不是实现这一目标的最佳方式。我不熟悉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;

}
我有一个-drawRect的存根:它没有实现

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

我有一个-drawRect的存根:它没有实现


移除存根后,所有操作都完全按照预期进行。

这是一个有用的指针,但它依赖超级类完成大部分繁重的工作,因为它已经接受这两种粘贴板类型。如果您使用自己的粘贴板类型,还必须调用RegisterForDragedTypes,并实现可接受的DragTypes和prepareForDragOperation。这是一个有用的指针,但它依赖于超级类来完成大部分繁重的工作,因为它已经接受这两种粘贴板类型。如果您使用自己的粘贴板类型,还必须调用RegisterForDragedTypes,并实现acceptableDragTypes和prepareForDragOperation。