2011-10-28 36 views
0

我有一個NSTableView沒有響應上/下箭頭鍵。根據我的理解,響應是默認行爲,所以我不確定發生了什麼(注意,我不覆蓋任何鍵盤命令)。我爲我的表做的唯一設置是:NSTableView沒有響應向上/向下箭頭鍵

[tableView setDoubleAction: @selector(doubleClickedRow)]; 
[tableView setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 
[tableView registerForDraggedTypes: [NSArray arrayWithObjects: NSFilenamesPboardType, nil]]; 
[tableView setDraggingSourceOperationMask: NSDragOperationCopy forLocal:NO]; 

但從我所知道的,這些都不會導致任何問題。

有沒有人有什麼建議,我可以找到這個問題的根源?

+0

什麼的'在筆尖refusesFirstResponder'設定值? – hamstergene

+0

你可以點擊一行來選擇它嗎?它是否突出顯示?在我的表格視圖中,我可以開始使用向上箭頭和向下箭頭。 – paulmelnikow

+0

是的,我可以點擊該行來選擇它。然後,一旦我嘗試點擊錯誤鍵,什麼都不會發生。我今晚會檢查'refusesFirstResponder'的值。 – Kyle

回答

0

我有一個NSTableView沒有響應上/下箭頭鍵。 從我的理解這是默認行爲

這不是默認行爲。 NSTableView處理鍵盤事件並允許用光標鍵進行導航。

也許你可以在以下問題的伎倆調試響應鏈: How to inspect the responder chain?

+0

咦? 「這不是默認行爲」似乎與「NSTableView處理鍵盤事件」相矛盾。 – paulmelnikow

+0

如果我正確理解問題,Zenox假定NSTableView不處理鍵盤事件。這個假設是錯誤的。 NSTableView的默認實現提供鍵盤導航。 –

1

你重寫keyDown:地方?要麼在自定義NSTableView子類中,要麼可能在窗口控制器中?這可能是造成乳清箭頭鍵不起作用的原因。

我遇到了與自定義表視圖相同的問題。我解決它通過調用super爲方向鍵,讓表處理該事件:

@implementation ILCustomTableView 

- (void)keyDown:(NSEvent *)theEvent 
{ 
    if ([theEvent modifierFlags] & NSNumericPadKeyMask) 
    { 
     [super keyDown:theEvent]; // Let table view handle arrow keys 
    } else { 

     [self interpretKeyEvents:[NSArray arrayWithObject:theEvent]];   
    } 
} 

- (void)insertNewline:(id)sender 
{ 
    // Enter key. Do special stuff here... 
} 
@end 
2

一個NSTableView也將不響應箭頭鍵如果包含表NSWindow不是關鍵窗口。

最近遇到這種情況的情況是,如果NSWindow的「標題欄」外觀選項未在界面生成器中設置:將NSWindow的默認行爲更改爲拒絕密鑰狀態。見-[NSWindow canBecomeKeyWindow]

因此,即使在將NSWindow作爲沒有標題欄的模式表單呈現時,標題欄選項也必須設置,否則關鍵事件將無法到達NSTableView。

0

剛剛遇到這個問題,我發現這條線防止上/下箭頭鍵正確選擇行。

[self.tableView setSelectionHighlightStyle:NSTableViewSelectionHighlightStyleNone];

我試圖用我自己的背景顏色,所以我補充說。當我點擊上/下,它觸發了shouldSelectRow:,但它總是0!評論上面的這一行爲我解決了這個問題。

0

我有同樣的問題,用箭頭鍵我的tableview的委託沒有得到通知的變化。

這是我斯威夫特的解決方案:

首先子類NSTableView的,然後重寫此方法。

override func keyDown(theEvent: NSEvent) { 
    super.keyDown(theEvent) 
    let code=theEvent.keyCode 
    if code >= 123 && theEvent.keyCode <= 126 { 
     if let target=target{ 
      target.performSelector(action) 
     } 
    } 
} 

的123到126碼的左,右,下,上分別

相關問題