2009-10-28 58 views
2

我有一個UIButton在每個表格單元格內創建。我想掛鉤的觸摸事件,像這樣:UITableViewController內的UIButton

[imageButton addTarget:self 
       action:@selector(startVote:) 
     forControlEvents:UIControlEventTouchUpInside]; 

我想通過關於當前行(該行的對象的ID)到startVote方法數據。有沒有一種方法,我錯過了這樣做,或者我打破了一些最佳做法。這似乎是一個非常正常的事情?

回答

2

我假設你有某種NSArray的數據傳遞給cellForRowAtIndexPath中的按鈕。

startVote試試這個:

- (void)startVote:(id)sender { 
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
    NSDictionary *myData = [myArray objectAtIndex:indexPath.row]; 
} 

編輯:

如果由於某種原因未選擇該行,你可以指定一個唯一的tag來在創建,然後每個按鈕:

- (void)startVote:(id)sender { 
    int myTag = [(UIButton *)sender tag]; 
    NSDictionary *myData = [myArray objectAtIndex:myTag]; 
} 

也許你會做一些操作與tag,所以它可以作爲一個索引(我添加一定數額,每tag,所以它不會與操作系統使用的「自動」標記衝突。

+0

該行不會被選中。點擊該按鈕時,該行不會被選中。 – Jason 2009-10-28 19:23:33

+0

編輯,以反映當前的需求與「俗氣」,但工作解決方案 – mga 2009-10-28 19:58:47

2

UITableViewCell並不知道它在表格中顯示的行。請記住,其意圖是在整個表格中重複使用相同的單元實例來顯示其數據。也就是說,您的UITableViewController負責設置單元格並將它們傳遞給系統(當然還有索引路徑)。你可以在這一點上,做這樣的事情:

  • 假設它是一個自定義單元格類,設置屬性對細胞的實例,以確定它是什麼顯示一行,並且您的按鈕,可以在以後使用。
  • 如果您將這些按鈕放在單元格中作爲附件視圖,請查看錶格代表的tableView:accessoryButtonTappedForRowWithIndexPath:方法。
  • 如果是單節表格,您可以做一些非常俗氣的事情,比如將行索引存儲在按鈕的tag屬性中。您的startVote:方法已通過該按鈕,然後可以提取其標記。
+0

保存其當前行索引的自定義單元格屬性是我迄今聽到的最佳方法。 – gerry3 2009-10-30 08:46:34