2009-05-30 62 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即可。

相关问题