获取自定义单元格上的节号和行号按钮单击?

Rah*_*yas 8 iphone cocoa-touch objective-c

我有自定义单元格的tableview.该表分为许多部分和行.我在单元格上有一个自定义按钮.现在我想在点击该按钮时获得节号和行号.对此有任何想法

Jim*_*vey 26

您需要在视图控制器上实现UIControl事件处理方法,并将其设置为所有按钮的处理程序.即在你的-tableView:cellForRowAtIndexPath:功能中你会做类似的事情:

[theCell.button addTarget: self
                   action: @selector(buttonPressed:withEvent:)
         forControlEvents: UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)

然后您的事件处理程序将如下所示:

- (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 */
}
Run Code Online (Sandbox Code Playgroud)

  • 稍微纠正... [事件触摸]应该是[event allTouches] (6认同)

dme*_*edi 8

一些想法:

您可以遍历按钮的超级视图层次结构,直到找到UITableViewCell,然后在UITableView上调用 - (NSIndexPath*)indexPathForCell:(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
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用按钮的标记来存储引用该行的索引.这只包含一个整数,因此当您有一个部分时,或者当您将行作为平面列表进行管理时,它最有意义.

您可以替代地将UITableViewCell子类化以封装按钮.您的UITableViewCell可以响应按钮事件并将事件重新广播给自己的委托,传递自我.然后,事件委托可以在UITableView上调用 - (NSIndexPath*)indexPathForCell:(UITableViewCell*)单元格来获取索引路径.


zpe*_*esk 6

在tableView中选择单元格时,将调用以下方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
Run Code Online (Sandbox Code Playgroud)

访问部分编号: int section = indexPath.section;

访问行号(在正确的部分内): int row = indexPath.row;

  • 当用户点击一行上的按钮时,不会调用它; 只有在他们点击行背景本身时才会调用它. (2认同)