我有一个自定义的UITableViewCell,我在其上添加了一个按钮,我在viewController中的IBAction上关联了该按钮。现在我遇到的问题是如何知道该按钮的创建单元格。当我提出我的viewController,其中有一个表并且有多行(自定义UITableViewCell),现在当用户按下按钮时,操作被调用,但我怎么知道它是哪一行。
因为基于行索引我需要存储一些值。
编辑:我现在有一些线索,但我仍然不确定我该怎么做,所以看起来像我的tableViewController cellForRowAtIndexPath方法我必须做这样的事情
[cell.button1 addTarget:self action:@selector(addToCart:) forControlEvents:UIControlEventTouchUpInside];
然后我必须写一个方法
-(IBAction) addToCart:(id) sender
但我还不知道如何在addToCart方法中获取行索引。 感谢您的帮助。
答案 0 :(得分:20)
好的,最后我得到了答案,查看不同的论坛,人们建议做这样的事情
在cellForRowAtIndexPath中的自定义表视图控制器中执行此操作
cell.addToCart.tag = indexPath.row;
[cell.addToCart addTarget:self action:@selector(addToCart:)
forControlEvents:UIControlEventTouchUpInside];
其中addToCart是我的customUITableViewCell中UIButton的名称。它似乎对我不起作用。所以这就是我做的事情
-(IBAction) addToCart:(id) sender{
NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)
[[sender superview] superview]];
NSLog(@"The row id is %d", indexPath.row);
}
然后通过interfacebuilder我将我的按钮的动作关联到我的表视图控制器上的addToCart IBAction。
答案 1 :(得分:5)
更少黑客。
[cell.button1 addTarget:self action:@selector(addToCart:event:) forControlEvents:UIControlEventTouchUpInside];
- (void)addToCart:(id)sender event:(id)event
{
NSSet *touches = [event allTouches];
UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition];
}
答案 2 :(得分:4)
接受的答案不再适用。请参阅this帖子
就是那样:
- (void)checkButtonTapped:(id)sender
{
CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];
if (indexPath != nil)
{
...
}
}
答案 3 :(得分:0)
许多开发人员使用自定义视图在旧版iOS上的Table视图中显示自定义单元格。如果您是其中之一,那么您将不得不面对一个问题,即您的按钮点击操作将不再适用于iOS7。
如何解决此问题:
您有两种选择:
选项1 :使用新的表格单元格而不是视图来创建新的布局。并将所有布局再次放入表格单元格中。
我知道,这需要付出很多努力。如果你不想这样做,我们会有一个非常小的黑客:选项2
选项2 :为您的按钮创建一个IBOutlet,并将此按钮添加为您单元格内容视图的子视图。
[self.myCell.contentView addSubview:self.btn_click];
上面的代码行将添加btn_click作为内容视图的子视图。现在按钮点击操作应该有效。