自定义UITableViewCell和IBAction

Yog*_*esh 3 uitableview ibaction

我有一个自定义的UITableViewCell,我在其上添加了一个按钮,我在viewController中的IBAction上关联了该按钮.现在我遇到的问题是如何知道该按钮的创建单元格.当我提出我的viewController,其中有一个表并且有多行(自定义UITableViewCell),现在当用户按下按钮时,操作被调用,但我怎么知道它是哪一行.

因为基于行索引我需要存储一些值.

编辑:我现在有一些线索,但我仍然不知道我将如何做,所以看起来像我的tableViewController cellForRowAtIndexPath方法我必须做这样的事情

[cell.button1 addTarget:self action:@selector(addToCart:) forControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)

然后我必须写一个方法

-(IBAction) addToCart:(id) sender
Run Code Online (Sandbox Code Playgroud)

但我还不知道如何在addToCart方法中获取行索引.感谢您的帮助.

Yog*_*esh 20

好的,最后我得到了答案,看着不同的论坛,人们建议做这样的事情

在cellForRowAtIndexPath中的自定义表视图控制器中执行此操作

cell.addToCart.tag = indexPath.row;
[cell.addToCart addTarget:self action:@selector(addToCart:)    
                               forControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)

其中addToCart是我的customUITableViewCell中UIButton的名称.它似乎对我不起作用.所以这就是我所做的

-(IBAction) addToCart:(id) sender{
        NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)
                    [[sender superview] superview]];
    NSLog(@"The row id is %d",  indexPath.row); 
 }
Run Code Online (Sandbox Code Playgroud)

然后通过interfacebuilder我将我的按钮的动作关联到我的表视图控制器上的addToCart IBAction.

  • 在上面的示例中,行总是返回0,而是执行此操作: - (IBAction)addToCart:(id)sender {NSLog(@"row id is%d",[sender tag]); } (2认同)

iHo*_*rse 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];

}
Run Code Online (Sandbox Code Playgroud)