表格检视中的QLPreviewPanel问题:「没有控制器」 [英] QLPreviewPanel in tableview with issue: "has no controller"
问题描述
我想在QLPreviewPanel中的表视图中显示URL,但出现此错误:
I would like to display the urls from a table view in a QLPreviewPanel but i got this error:
[QL] QLError():-[QLPreviewPanel reloadData]在面板上被调用 没有控制器-修正此问题,否则将很快出现.
[QL] QLError(): -[QLPreviewPanel reloadData] called while the panel has no controller - Fix this or this will raise soon.
我的表控制器已经符合这两个协议:QLPreviewPanelDataSource,QLPreviewPanelDelegate.
My table controller already conform to this two protocols : QLPreviewPanelDataSource, QLPreviewPanelDelegate.
如何将[QLPreviewPanel sharedPreviewPanel]
的控制器设置为表控制器?
How can i set the controller of [QLPreviewPanel sharedPreviewPanel]
as my table controller?
- (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;
}
推荐答案
I found the solution here: QuickLook consumer as a delegate from an NSViewController. In my case i need these 3 lines of code in the panel controller (NSWindowController) where i have the instance of my table view controller.
- (void)awakeFromNib {
NSResponder * aNextResponder = [self nextResponder];
[self setNextResponder:_tableController];
[_tableController setNextResponder:aNextResponder];
}
这篇关于表格检视中的QLPreviewPanel问题:「没有控制器」的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!