NSTextView Drag & Drop - символы не видны после удаления - PullRequest
2 голосов
/ 20 декабря 2011

У меня есть подклассы 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;

}

1 Ответ

0 голосов
/ 20 декабря 2011

У меня была заглушка для -drawRect:, которая не имела реализации.

После удаления заглушки все работает точно так, как задумано.

...