如何在应用程序中使用SpaceBar按钮来调用快速查看

时间:2013-05-25 10:57:08

标签: objective-c macos cocoa nscollectionview quicklook

我在collectionview中显示了一些图片。现在我想选择图像并按空格键。如果我按下空格按钮,图像应该在单独的窗口中快速查看。任何想法?

2 个答案:

答案 0 :(得分:4)

在您的观点中,请执行以下操作:

- (void)keyDown:(NSEvent *)event
{
  unichar firstChar = 0;
  if ([[event charactersIgnoringModifiers] length] > 0)
    firstChar = [[event charactersIgnoringModifiers] characterAtIndex:0];

  if (firstChar == ' ')
  {
    if ([QLPreviewPanel sharedPreviewPanelExists]
        && [[QLPreviewPanel sharedPreviewPanel] isVisible])
    {
      [[QLPreviewPanel sharedPreviewPanel] orderOut:nil];
    }
    else
    {
      [[QLPreviewPanel sharedPreviewPanel] makeKeyAndOrderFront:nil];
      [[NSApp mainWindow] makeKeyWindow];
    }
  }
  else if (firstChar == NSRightArrowFunctionKey)
  {
    if ([QLPreviewPanel sharedPreviewPanelExists]
        && [[QLPreviewPanel sharedPreviewPanel] isVisible])
    {
      [[QLPreviewPanel sharedPreviewPanel] selectNextItem];
      return;
    }
  }
  else if (firstChar == NSLeftArrowFunctionKey)
  {
    if ([QLPreviewPanel sharedPreviewPanelExists]
        && [[QLPreviewPanel sharedPreviewPanel] isVisible])
    {
      [[QLPreviewPanel sharedPreviewPanel] selectPreviousItem];
      return;
    }
  }
  else
    [super keyDown:event];
}

然后,我在我的应用程序的委托(AppDelegate.m)中执行此操作:

- (BOOL)acceptsPreviewPanelControl:(QLPreviewPanel *)panel
{
  //note that this methods indeed gets called because NSApp's
  //delegate is in the responder chain.
  return YES;
}

- (void)beginPreviewPanelControl:(QLPreviewPanel *)panel
{
  previewPanel = panel; //set an ivar
  [panel setDataSource:self];
}

- (void)endPreviewPanelControl:(QLPreviewPanel *)panel
{
  previewPanel = nil;
}

- (NSInteger)numberOfPreviewItemsInPreviewPanel:(QLPreviewPanel *)panel
{
  //return a number of your choice (depends on your own app)
}

- (id <QLPreviewItem>)previewPanel:(QLPreviewPanel *)panel
                previewItemAtIndex:(NSInteger)index
{
  //return an object of your choice (depends on your app)
}

- (void)handleCurrentFileItemsSelectionChange:(NSNotification *)note
{
  [previewPanel reloadData]; //referring to the ivar
}

答案 1 :(得分:1)

我终于得到了。我刚刚替换了imageViewes,并将NSButton和setsetton设置为等价的

- (BOOL)isOneOfMyKeyEquivs:(NSString *)keyChar
{
    if (([keyChar isEqualToString:@" "])||([keyChar isEqualToString:@"\r"])) {
        return YES;
    } else {
        return NO;
    }
}
- (BOOL)performKeyEquivalent:(NSEvent *)theEvent
{

        //NSLog(@"OK");
        NSString* keyChar = [theEvent characters];
        if ([self isOneOfMyKeyEquivs:keyChar])
        {
            [[self cell] setKeyEquivalent:keyChar];
        }
        return [super performKeyEquivalent:theEvent];


    return NO;
}

并执行按钮操作。