“获取”按钮单击UI表视图单元格内?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (8)

我有一个ViewController与tableview和一个单独的表格单元格模板。单元格模板有一些按钮。我想访问按钮点击以及在我定义了Table视图的View控制器内单击的单元格的索引。

所以,我有ViewController.hViewController.m

在那里我有UItableviewTableTemplate.hTableTemplate.mTableTemplate.xib在那里我有定义的nib。我想要单元索引中的按钮单击事件ViewController.m

我该怎么做?

提问于
用户回答回答于

1)在你的cellForRowAtIndexPath:方法中,将按钮标签指定为索引:

cell.yourbutton.tag = indexPath.row;

2)为你的按钮添加目标和动作如下:

[cell.yourbutton addTarget:self action:@selector(yourButtonClicked:) forControlEvents:UIControlEventTouchUpInside];

3)基于索引的代码动作如下ViewControler

-(void)yourButtonClicked:(UIButton*)sender
{
     if (sender.tag == 0) 
     {
         // Your code here
     }
}

用户回答回答于

首先我们需要一个接口(协议),这个接口将被单元用来沟通(委托)按钮点击。

@protocol CellDelegate <NSObject>
- (void)didClickOnCellAtIndex:(NSInteger)cellIndex withData:(id)data;
@end

在自定义单元格和表格视图控制器中包含此协议。并确保表视图控制器确认此协议。

在定制单元格中创建两个属性:

@property (weak, nonatomic) id<CellDelegate>delegate;
@property (assign, nonatomic) NSInteger cellIndex;

UIButtonIBAction委托中单击:( 对于需要委托给视图控制器的自定义单元类中的任何操作,也可以执行此操作

- (IBAction)buttonClicked:(UIButton *)sender {
    if (self.delegate && [self.delegate respondsToSelector:@selector(didClickOnCellAtIndex:withData:)]) {
        [self.delegate didClickOnCellAtIndex:_cellIndex withData:@"any other cell data/property"];
    }
}

cellForRowAtIndexPath取出单元格之后,在表格视图控制器中设置上述属性。

cell.delegate = self;
cell.cellIndex = indexPath.row; // Set indexpath if its a grouped table.

并在表视图控制器中实现委托:

- (void)didClickOnCellAtIndex:(NSInteger)cellIndex withData:(id)data
{
    // Do additional actions as required.
    NSLog(@"Cell at Index: %d clicked.\n Data received : %@", cellIndex, data);
}

这将是在表视图控制器中获取自定义单元格按钮操作的理想方法。

扫码关注云+社区