0
我有一個NSTableView與行數。 allowsEmptySelection屬性是NO,所以總是選擇一行。按照預期,我可以使用箭頭鍵在桌面視圖中上下移動。在NSTableView中用'j'和'k'模擬箭頭鍵?
我也想用'j'和'k'鍵來上下移動。我看過Cocoa Event-Handling Guide,但無法弄清楚如何讓這些鍵模擬上下方向鍵。
爲什麼它的價值,這是我目前正在做的。我並不是真的在「模擬箭頭鍵」。相反,當我按'j'和'k'時,我只是做我想要的行爲。這很好,但我想知道是否有更好的方法...
- (void)keyDown:(NSEvent *)theEvent {
NSInteger row = [self.tableView selectedRow];
NSInteger numRows = [self.tableView numberOfRows];
switch ([theEvent keyCode]) {
case 38: // 'j'
if (row < numRows - 1) {
[self.tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:row+1] byExtendingSelection:NO];
}
break;
case 40: // 'k'
if (row > 0) {
[self.tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:row-1] byExtendingSelection:NO];
}
break;
default:
[super keyDown:theEvent];
}
}
我嘗試這樣做,但我得到這個錯誤: - [MyTableView爲moveUp:]:無法識別的選擇發送到實例0x100148270。顯然它找不到-moveUp/-moveDown。任何想法? – sam 2010-12-14 01:04:28
請注意'moveUp:'是不同於'moveUp'的方法名稱(不帶冒號)。 ughoavgfhw的示例代碼假定您已經定義了像' - (void)moveUp:(id)sender'和' - (void)moveDown:(id)sender'這樣的方法。 – NSGod 2011-01-16 02:50:51
@NSGod:它們是用於處理箭頭鍵的預定義方法,而不是假設。 NSTableView不得使用它們。你可以嘗試使用箭頭鍵代碼創建一個假事件並將其傳遞給超級(我將在更新中展示它的方式)。 – ughoavgfhw 2011-01-16 05:29:12