0

我有一个 UITableView,我为其创建了一个自定义 UITableViewCell。tableview 中的每一行都有一个按钮。我想知道单击按钮时的部分编号,以便我知道单击了哪个部分按钮。我已经尝试过在堆栈上找到的一些东西,但没有任何效果。

UIButton *b = sender; 
NSIndexPath *path = [NSIndexPath indexPathForRow:b.tag inSection:0]; 
NSLog(@"Row %d - Section : %d", path.row, path.section);
4

4 回答 4

5

不知道你试过什么,但我可能会做这样的事情。从内存中做一些伪代码,here。

- (void)buttonClicked:(id)sender {
    CGPoint buttonOrigin = [sender frame].origin;
    // this converts the coordinate system of the origin from the button's superview to the table view's coordinate system.
    CGPoint originInTableView = [self.tableView convertPoint:buttonOrigin fromView:[sender superview];

    // gets the row corresponding to the converted point
    NSIndexPath rowIndexPath = [self.tableView indexPathForRowAtPoint:originInTableView];

    NSInteger section = [rowIndexPath section];

}

如果我想清楚,如果按钮不在UITableView单元格内,这将为您提供灵活性。比如说,如果你已经嵌套在一些中间视图中。

可悲的是,似乎没有 NSTableView 的 iOS 等价物rowForView:

于 2013-05-18T06:12:29.993 回答
3

为按钮单击创建一个处理程序并将其添加到tableView:cellForRowAtIndexPath:方法中

- (void)buttonPressed:(UIButton *)button{

    UITableViewCell *cell = button.superView.superView;

    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
    //Now you have indexPath of the cell 
    //do your stuff here

}
于 2013-05-18T06:01:22.733 回答
0

当您在其中创建自定义 UITableViewCell 时,cellForRowAtIndexPath应将其部分作为参数传递。它可能看起来像:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
    MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];

  if (!cell)
  { 
  cell = [[[MyCustomCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"MyIdentifier" section:indexPath.section] autorelease];
  }

    return cell;
 }

MyCustomCell现在您的单元格知道了它的部分,您可以在课堂上执行 click 方法时使用它

于 2013-05-18T06:01:21.317 回答
0

尝试这个,

首先将部分作为标签分配给按钮,并在cellForRowAtIndexPath方法中的按钮上添加目标。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    [cell.btnSample setTag:indexPath.section];
    [cell.btnSample addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
    ...
}

从您定义的 IBAction 的发件人处获取 Section 作为标签(单击此处的按钮)。

-(IBAction)buttonClicked:(id)sender
{
    NSLog(@"Section: %d",[sender tag]);
}
于 2013-05-18T06:03:59.973 回答