У меня есть подклассы NSTextView
, чтобы я мог удалить файл и скопировать содержимое строки файла в представление (в отличие от стандартной реализации, которая отбрасывает путь к файлу в представление). Текст вроде сбрасывается правильно, но потом не виден после сбрасывания. Я вижу, что курсор переместился, и даже могу скопировать выпавший текст из представления и вставить, например, в TextEdit. Я попытался добавить [self setNeedsDisplay:YES]
в конце моего метода -performDragOperation:
, но поведение не изменилось.
Вот код, который я написал до сих пор. Я думаю, что это не лучший способ реализовать это. Я новичок в реализации перетаскивания в какао.
-(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;
}
registerForDraggedTypes
, а также реализоватьacceptableDragTypes
иprepareForDragOperation
. - person Grimxn   schedule 20.11.2018