2013-07-22 34 views
4

我正在爲此努力,不禁感到我失去了一些明顯的東西!在NSTable中獲取NSButton的行

我有一個NSTable其中包含一個表單元視圖,其中包含一個NSButton。

該按鈕有一個出口定義,並且表視圖有一個出口定義。

我使用下面的代碼來獲得該行的索引按鈕,當用戶點擊該按鈕:

- (IBAction)approveButtonInTable:(id)sender { 

    NSInteger selected = [self.tweetTableView clickedRow]; 
    NSLog(@"sender sends :%ld", selected); 
} 

然而,這總是帶着-1回答說,這是沒有大量幫助。

我在這裏錯過了很明顯的東西嗎?

感謝

加雷思

編輯1

我曾指出,如果我使用它的實現代碼如下的出口這樣做工作,可使用此:

- (IBAction)tweetTableAction:(id)sender { 
    NSInteger selected = [_tweetTableView clickedRow]; 
    NSLog(@"sender sends :%ld", selected); 
} 

但是,這並不能真正幫助我,因爲當我點擊按鈕時,仍然無法工作,呵呵!

回答

4

既然你說你正在使用的NSTableCellView,這告訴我,你」重新使用基於視圖的表格。在這種情況下,您想要撥打rowForView:,傳入按鈕。我相信這種方法只適用於這種情況(從未在基於單元格的表上嘗試過)。

- (IBAction)approveButtonInTable:(id)sender { 
    NSInteger selected = [self.tweetTableView rowForView:sender]; 
    NSLog(@"sender sends :%ld", selected); 
} 
+0

完美,謝謝! –

0

單擊該按鈕與單擊表格行不同。最好的辦法是,以用標籤,涉及到它們在表中(也許是始於100)位置的按鈕,然後使用:

- (IBAction)approveButtonInTable:(id)sender { 

    NSInteger selected = [sender tag] - 100; // or whatever value you decide to start tagging 
    NSLog(@"sender sends :%ld", selected); 
} 
+0

由於按鈕是由tableview生成的我假設我將不得不重寫一個類函數來做到這一點,你有任何指針具體如何做到這一點? –

+0

@GarethJeanne您必須在接近init時間結束的某種方法中執行此操作。 Jablair的解決方案看起來更容易實施。 – trojanfoe

0

如果有人尋找一個斯威夫特3版本Jablair答案。

只需實現@IBAction方法。

@IBAction func approveButtonInTable(_ sender: Any) { 
    let selectedRow = tweetTableView.row(for: sender as! NSView) 
    print("sender sends \(selectedRow)") 
}