2013-05-25 14 views

回答

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 
} 
+0

這些委託方法可以更好地在窗口控制器或(如果有的話)文檔類中實現,而不是在應用程序委託中實現。例如,如果您打開「首選項」,QL面板將保持不變。 –

+0

是NSCollectionView,關鍵事件可支持嗎? – user23790

+0

@muruganandham如果它還沒有,你必須通過重寫'receivingFirstResonder:'和'makeFirstResponder:'等方法來創建子類。請參閱此處:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html#//apple_ref/doc/uid/10000060i-CH3-SW2 – 7cows

1

我終於得到了。我剛剛更換imageViewes並把NSButton和設置好的spacebutton作爲keyequivalent作爲

- (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; 
} 

,並進行按鈕操作。

+0

您應該標記@ 7cows的答案,因爲這是你的問題的確切解決方案。 –

相關問題