2009-05-30 65 views
8

我有自定義單元格的tableview.the表被分成許多部分和rows.i有一個單元格上的自定義按鈕。現在,當我點擊該按鈕時,我想要獲取部分編號和行編號。?獲取自定義單元格按鈕單擊的節號和行號?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

訪問區段號碼:內正確int section = indexPath.section;

訪問的行數( 對此

回答

26

您需要在您的視圖控制器上實現UIControl事件處理方法,並將其設置爲所有按鈕的處理程序。即你-tableView:cellForRowAtIndexPath:函數內部,你會做這樣的事情:

[theCell.button addTarget: self 
        action: @selector(buttonPressed:withEvent:) 
     forControlEvents: UIControlEventTouchUpInside]; 

那麼你的事件處理程序是這樣的:

- (void) buttonPressed: (id) sender withEvent: (UIEvent *) event 
{ 
    UITouch * touch = [[event touches] anyObject]; 
    CGPoint location = [touch locationInView: self.tableView]; 
    NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: location]; 

    /* indexPath contains the index of the row containing the button */ 
    /* do whatever it is you need to do with the row data now */ 
} 
+6

輕微更正... [事件觸及]應該是[事件所有觸發] – dizy 2009-06-09 21:46:27

6

當你在你的tableView選擇一個單元格下面的方法被調用的任何想法節):int row = indexPath.row;

+2

當用戶點擊某一行上的按鈕不叫;它只在他們點擊行背景本身時才被調用。 – 2009-06-11 01:31:16

8

的一點想法:

你可以通過按鈕的上海華層次重複,直到你找到一個UITableViewCell,然後調用 - (NSIndexPath *)indexPathForCell:在UITableView的(*的UITableViewCell)單元。

- (void)buttonClicked:(id)sender { 
    UIView *button = sender; 

    for (UIView *parent = [button superview]; parent != nil; parent = [parent superview]) { 
    if ([parent isKindOfClass: [UITableViewCell class]]) { 
     UITableViewCell *cell = (UITableViewCell *) parent;   
     NSIndexPath *path = [self.tableView indexPathForCell: cell]; 

     // now use the index path 

     break; // for 
    } 
    } 
} 

您可以交替使用按鈕的標記來存儲引用該行的索引。這隻能保存一個整數,所以當你有一個單獨的部分時,或者當你將行作爲一個扁平列表來管理時,它是最有意義的。

您可以替代子類UITableViewCell封裝按鈕。您的UITableViewCell可以響應按鈕事件並將事件轉播給其自己的代理,從而傳遞自我。然後,事件委託可以調用UITableView上的 - (NSIndexPath *)indexPathForCell:(UITableViewCell *)單元來獲取索引路徑。

1

添加可以在你的UITableViewCell的subclassTo的實例變量存儲單元格的索引路徑:

NSIndexPath *myIndexPath; 

當您在單元格:在indexpath

cellForIndexPath: 

通到新創建的/再生細胞。

現在,當您按下按鈕時,只需從您的手機ivar讀取indexpath即可。

相關問題