QLPreviewPanel в табличном представлении с вопросом: "нет контроллера"
Я хотел бы отобразить URL-адреса из табличного представления в QLPreviewPanel, но я получил эту ошибку:
[QL] QLError (): - [QLPreviewPanel reloadData] вызывается, когда на панели нет контроллера - Исправьте это или это скоро повысится.
Мой контроллер таблицы уже соответствует этим двум протоколам: QLPreviewPanelDataSource, QLPreviewPanelDelegate.
Как я могу установить контроллер [QLPreviewPanel sharedPreviewPanel]
как контролер моего стола?
- (void)didPressSpacebarForTableView:(NSTableView *)tableView {
NSLog(@"Spacebar clicked");
if ([QLPreviewPanel sharedPreviewPanelExists] && [[QLPreviewPanel sharedPreviewPanel] isVisible]) {
[[QLPreviewPanel sharedPreviewPanel] orderOut:nil];
} else {
[[QLPreviewPanel sharedPreviewPanel] reloadData];
[[QLPreviewPanel sharedPreviewPanel] makeKeyAndOrderFront:nil];
}
}
- (NSInteger)numberOfPreviewItemsInPreviewPanel:(QLPreviewPanel *)panel {
return [[(PasteboardItem *)[[_arrayController arrangedObjects] objectAtIndex:[_tableView selectedRow]] filenames] count];
}
- (id<QLPreviewItem>)previewPanel:(QLPreviewPanel *)panel previewItemAtIndex:(NSInteger)index {
NSString *path = [(PasteboardItem *)[[_arrayController arrangedObjects] objectAtIndex:[_tableView selectedRow]] filenames][index];
NSURL *url = [NSURL fileURLWithPath:path];
return url;
}
- (BOOL)acceptsPreviewPanelControl:(QLPreviewPanel *)panel {
return YES;
}
-(void)beginPreviewPanelControl:(QLPreviewPanel *)panel {
panel.dataSource = self;
panel.delegate = self;
}
- (void)endPreviewPanelControl:(QLPreviewPanel *)panel {
panel.dataSource = nil;
panel.delegate = nil;
}
1 ответ
Решение
Я нашел решение здесь: потребитель QuickLook в качестве делегата от NSViewController. В моем случае мне нужны эти 3 строки кода в контроллере панели (NSWindowController), где у меня есть экземпляр моего контроллера табличного представления.
- (void)awakeFromNib {
NSResponder * aNextResponder = [self nextResponder];
[self setNextResponder:_tableController];
[_tableController setNextResponder:aNextResponder];
}