2009-03-06 73 views
62

我需要我的應用程序來打開一個窗口,當用戶雙擊NSTableView中的一行時。我有點難以找到關於如何實現這一目標的信息或例子。任何人都可以指引我走向正確的方向嗎?雙擊Cocoa中的NSTableView行?

回答

117

看看NSTableView上的-setDoubleAction:方法;您可以將其設置爲一種方法,該方法將與通常的目標操作系統一樣被調用,但只需雙擊即可。

在該操作方法中,-clickedRow將很有用。

+7

有沒有辦法通過IB連接? – 2010-09-20 17:30:09

+21

還記得用setTarget設置表視圖的目標:傻,但可以忽略 – nduplessis 2011-07-02 20:06:04

+1

如果你實現-setDoubleAction:作爲委託方法,或者你應該創建一個IBOutlet iVar到表,並且調用-setDoubleAction:on伊娃? – 2011-12-04 21:13:22

55

將更多基本信息添加到@JimPuls答案,以便其他新手可以使用Cocoa。

  1. 需要在接口中聲明NSTableView的IBOutlet。我認爲在表格的代表中最好這樣做。
  2. 表中的IBOutlet需要通過Interface Builder進行連接。按Ctrl-Drag &從聲明出口到表視圖的類中放入IB。釋放鼠標時,彈出窗口應顯示步驟#1中聲明的插座名稱。選擇那個。
  3. 在@implementation部分的-awakeFromNib方法中,在步驟#1中聲明的IBOutlet上調用-setTarget:和-setDoubleAction:並在步驟#2中連接。

這是我的表格視圖委託的摘錄。我也將我的代理設置爲數據源,因此您將看到與它關聯的NSTableViewDelegate和NSTabeViewDataSource接口。

//接口摘錄。

@interface MyTableViewDelegate : NSObject <NSTableViewDelegate, NSTableViewDataSource> 
{ 
    // This iVar needs to be connected to the table view via the IB. 
    IBOutlet NSTableView *tableOutlet; 
} 

@property (assign) IBOutlet NSTableView *tableOutlet; 

- (void)doubleClick:(id)nid; 

@end 

//執行摘錄。

@implementation MyTableViewDelegate 

@synthesize tableOutlet = _tableOutlet; 

- (void)awakeFromNib { 
    [_tableOutlet setTarget:self]; 
    [_tableOutlet setDoubleAction:@selector(doubleClick:)]; 
} 

- (void)doubleClick:(id)object { 
    // This gets called after following steps 1-3. 
    NSInteger rowNumber = [_tableOutlet clickedRow]; 
    // Do something... 
} 

希望這會有所幫助。

0

你可以做同樣的事情的綁定,首先在.m文件.h文件中

-(IBAction)openWindow:(id)sender 

聲明一個mentod實現相同

-(IBAction)openWindow:(id)sender 
{ 
    //do something here; 
} 

到那種筆尖在您表視圖存在,選擇表視圖並獲得屬性檢查器的倒數第二個選項卡,打開雙cicl參數披露三角形檢查綁定以檢查fox選擇文件的所有者,模型鍵值應該是「self」,選擇器名稱將是「openWindow: 「,與」雙擊目標「說明相同re, 這將工作

10

由於PR辛格說,你可以使用可可綁定,你也可以傳遞selectedObjects。

  1. 在IB選擇表視圖,然後在綁定檢查器中設置這兩個綁定起來如下:

    >Double Click Target 
    
    bind to = Application delegate object (or file owner) 
    model key path = self 
    selector name = myMethod: 
    
    >Double Click Argument 
    
    bind to = array controller 
    controller key = selectedObjects 
    selector name = myMethod: 
    

凡myMethod的作爲

- (void)myMethod:(NSArray*)selectedObjects 
     { 
     NSLog(@"%@", selectedObjects); 
     } 

實現這也是這裏記錄: https://developer.apple.com/library/mac/qa/qa1472/_index.html

6

如果有人尋找一個迅速的2.0版本: 這是對我有用。看起來比Objective C代碼更容易。

@IBOutlet weak var searchResultTable: NSTableView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    searchResultTable.doubleAction = "doubleClickOnResultRow" 
} 

func doubleClickOnResultRow() 
{ 
    print("doubleClickOnResultRow \(searchResultTable.clickedRow)") 
} 
6

您可以連接Interface Builder中的雙擊操作。按住Control鍵點按您的表格視圖(確保您獲取表格視圖,而不是滾動視圖或剪輯視圖或表格列)以獲取其連接面板。在「已發送操作」部分找到「doubleAction」項。將它連接到您選擇的IBAction。