2011-02-09 19 views

回答

2

刪除記錄您可以創建NSTableView的子類,覆蓋keyDown像這樣:

- (void)keyDown:(NSEvent *)theEvent 
{ 

    unichar key = [[theEvent charactersIgnoringModifiers] characterAtIndex:0]; 
    if(key == NSDeleteCharacter) 
    { 

     [self deleteItem]; 
     return; 
    } 

    [super keyDown:theEvent]; 

} 

然後確保你想要的任何NSTableView的有刪除功能在Interface Builder中使用您的子類,而不是常規的NSTableView。

您可以實現例如- (void)deleteItem方法是這樣的:

- (void)deleteItem 
{ 
    if ([self numberOfSelectedRows] == 0) return; 

    NSUInteger index = [self selectedRow]; 

    [documentController deleteItemWithIndex:index]; 

} 
+0

如果您有多個視圖需要分別跟蹤同一個documentController,則可以使用標籤,即在Interface Builder中輸入視圖的標籤,然後檢查`keyDown:`方法中self.tag值的值。 – Frost 2012-03-02 16:48:01

+2

對不起,但這個答案不應被標記爲正確的。這個解決方案絕對不是最佳實踐。 – Jacque 2013-03-22 10:43:05

7

一種方法是很容易實現:

  1. 加+/-按鈕的界面IB,並將其與刪除連接到deleteRecord IBAction爲
  2. ( - )的IB選擇按鈕,導航到屬性檢查器>按鈕>等價鍵
  3. 在框中單擊開始記錄您的按鍵,然後按下Delete/Backspace鍵

當你建立你的項目,因爲喲ü實現deleteRecord方法,退格按鍵會從你的tableview

+1

是的,我已經想通了,但是當我一次超過1個表格視圖時,會給我帶來麻煩:) – 2011-02-13 18:40:15

6

實現該功能的正確方法是使用鍵綁定:

  1. 在IB選擇刪除菜單項,例如,將其設置爲與退格鍵等效的鍵。
  2. 將菜單項操作連接到您爲處理任務而編寫的方法。當您通過第一響應者連接時,會自動找到該響應者鏈中的此方法。
  3. 實施您的刪除功能。

取決於哪一種你寫的應用程序,有驗證委託方法。通過這種方法,您可以設置菜單項啓用狀態。對於基於文檔的應用程序,此驗證通過- (BOOL)validateUserInterfaceItem:(id)anItem發生。

3

這是使用NSViewControllerFirst Responder一個現代化的解決方案。

菜單Edit中的Delete菜單項連接到第一響應者的選擇器delete:。如果沒有Delete菜單項,請創建一個並將其連接到First Responder(紅色立方體)的delete:

  • 分配等價鍵Delete菜單項(⌘⌫
  • 在視圖控制器實現IBAction方法

    夫特:@IBAction func delete(_ sender: AnyObject)

    Objective- C:-(IBAction)delete:(id)sender

    並放入刪除表格視圖行的邏輯。

無子類需要。