2012-12-09 43 views
2

可可noob在這裏。使NSTableView生效

我有一個簡單的Mac應用程序,其中包括一個NSTextField,它提取一些結果並將它們放入NSTableView。我希望能夠在文本字段中按下上/下來激活表格視圖中的第一個/最後一個項目。

我已經做了以下內容:

- (void)keyUp:(NSEvent *)theEvent { 
    switch([theEvent keyCode]) { 
     case 125: { 
      NSLog(@"I need to move down"); 
      NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:0]; 
      [resultsTableView selectRowIndexes:indexSet byExtendingSelection:NO]; 
      [resultsTableView becomeFirstResponder]; 
      break; 
     } 
     case 126: { 
      NSLog(@"I need to move up"); 
      NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:[results count]-1]; 
      [resultsTableView selectRowIndexes:indexSet byExtendingSelection:NO]; 
      [resultsTableView becomeFirstResponder]; 
      break; 
     } 
    } 
} 

這部分是我想要的。它確實選擇resultsTableView中的第一個或最後一個項目,但所選項目保持灰顯狀態,並且文本視圖保持活動狀態。

我以爲在resultsTableView上撥打becomeFirstResponder就可以做到,但事實並非如此。

任何幫助將不勝感激!

回答

12

請勿直接撥打becomeFirstResponder。使用NSWindow的makeFirstResponder:

[[resultsTableView window] makeFirstResponder:resultsTableView]; 
+0

我只是跑成這樣,任何想法,爲什麼我們要通過窗口,而不是響應者自身的電話嗎? –

+0

[因爲蘋果這麼說](https://developer.apple.com/library/mac/documentation/cocoa/reference/applicationkit/classes/NSResponder_Class/Reference/Reference.html#//apple_ref/occ/instm/NSResponder/ becomeFirstResponder)'becomeFirstResponder'「永遠不要直接調用這個方法。」 – TheAmateurProgrammer