我有一个视图控制器,它有一个表格视图和一个用于表格单元格模板的单独的半边。单元格模板有一些按钮。我想要访问按钮单击以及在视图控制器中单击的单元格的索引,我在视图控制器中定义了Table视图。
所以我有ViewController.h
和ViewController.m
,其中有UITableView
和TableTemplate.h
,TableTemplate.m
和TableTemplate.xib
,其中我定义了nib。我想在ViewController.m
中使用单元格索引的按钮单击事件。
我该怎么做,有什么帮助吗?
发布于 2014-07-30 18:54:26
我之所以喜欢下面的技巧,是因为它还能帮助我识别表格的哪个部分。
在单元格cellForRowAtIndexPath中添加按钮:
UIButton *selectTaskBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[selectTaskBtn setFrame:CGRectMake(15, 5, 30, 30.0)];
[selectTaskBtn setTag:indexPath.section]; //Not required but may find useful if you need only section or row (indexpath.row) as suggested by MR.Tarun
[selectTaskBtn addTarget:self action:@selector(addTask:) forControlEvents:UIControlEventTouchDown];
[cell addsubview: selectTaskBtn];
事件addTask:
-(void)addTask:(UIButton*)btn
{
CGPoint buttonPosition = [btn convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];
if (indexPath != nil)
{
int currentIndex = indexPath.row;
int tableSection = indexPath.section;
}
}
希望这能有所帮助。
发布于 2018-10-29 18:20:58
使用Swift闭包:
class TheCell: UITableViewCell {
var tapCallback: (() -> Void)?
@IBAction func didTap(_ sender: Any) {
tapCallback?()
}
}
extension TheController: UITableViewDataSource {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: TheCell.identifier, for: indexPath) as! TheCell {
cell.tapCallback = {
//do stuff
}
return cell
}
}
发布于 2014-03-28 00:29:31
塔伦的代码不能在iOS7上运行,因为UITableViewCell结构改变了,现在他得到的是"UITableViewCellScrollView“。
这篇文章Getting UITableViewCell with superview in iOS 7有一个很好的解决方案,创建一个循环来找到正确的父视图,而不管将来结构中的任何变化。它可以归结为创建一个循环:
UIView *superView = [sender superview];
UIView *foundSuperView = nil;
while (nil != superView && nil == foundSuperView) {
if ([superView isKindOfClass:[UITableViewCell class]]) {
foundSuperView = superView;
} else {
superView = superView.superview;
}
}
该链接提供了一个更具可重用性的解决方案的代码,但这应该是可行的。
https://stackoverflow.com/questions/20655060
复制相似问题