如何在UITableViewCell中获取UIButton的indexPath?

use*_*971 11 xcode uitableview ios

我有一个UITableview多个细胞.在每个单元格上,我根据一些数组计数动态添加按钮.所以,当我点击一个按钮时,我就可以获得按钮的tag值.但是如何获得indexPath那个细胞呢?

这是我的代码-cellForRowAtIndexPath:

   UIView *view=(UIView*)[cell.contentView viewWithTag:indexPath.row+444];

   UIImageView *img=(UIImageView*)[cell.contentView viewWithTag:indexPath.row+999];
   img.image=[UIImage imageNamed:@"BHCS_empty.png"];

   if(integer!=50)
   {
        NSInteger y_axis=0;
        NSArray *Arr=[tableSubCategoryArr objectAtIndex:indexPath.row];
        img.image=[UIImage imageNamed:@"BHCS_selected.png"];

        view.Frame= CGRectMake(0,50,281, integer-50);
        for (int i=0; i<[Arr count]; i++)
        {
            NSLog(@"arr %@",[Arr objectAtIndex:i]);
            UIButton *Btn=[UIButton buttonWithType: UIButtonTypeCustom];
            Btn.frame=CGRectMake(0, y_axis, 281, 44);
            [Btn setImage:[UIImage imageNamed:@"BHCS_panel.png"] forState:UIControlStateNormal];
            [Btn addTarget:self action:@selector(subCategoryBtnClicked:) forControlEvents:UIControlEventTouchUpInside];
            [Btn setTag:i+100];
            [view addSubview:Btn];


            UILabel *nameLbl=[[UILabel alloc]initWithFrame:CGRectMake(20, y_axis,248, 44)];
            nameLbl.text = [[Arr objectAtIndex:i]objectForKey:@"SubCategoryName"];
            nameLbl.textColor = [UIColor whiteColor];
            nameLbl.backgroundColor=[UIColor clearColor];
            panelTableView.separatorColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"BHCS_panel_div1.png"]];
            nameLbl.font = [UIFont fontWithName:@"Helvetica" size:12.0f];
            [view addSubview:nameLbl];

            y_axis=y_axis+44+1.3f;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Mru*_*rug 28

我已经尝试了最大的给定答案,但在我和我通常用于最广义和理想的方式如下:

 CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];
 NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];
Run Code Online (Sandbox Code Playgroud)


CW0*_*007 13

ALLLLL答案在这里很糟糕,你不应该循环浏览超级视图.经典的例子,iOS 7 Apple更改了tableViewCell层次结构,您的应用程序现在将崩溃!

请改用:

如何知道UITableview行号


Ami*_*mit 9

更新的答案

使用它像:

CGPoint hitPoint = [sender convertPoint:CGPointZero toView:self.tableView]; 
NSIndexPath *hitIndex = [self.tableView indexPathForRowAtPoint:hitPoint];
Run Code Online (Sandbox Code Playgroud)

  • 不不不不 !只是不要循环浏览超级视图!http://stackoverflow.com/questions/9274494/how-to-know-the-uitableview-row-number/9274863#9274863 (4认同)

use*_*971 7

感谢所有我通过使用下面的代码解决这个问题

     NSIndexPath *indexPath = [panelTableView indexPathForCell:(UITableViewCell *)sender.superview.superview];

NSLog(@"%d",indexPath.row);
Run Code Online (Sandbox Code Playgroud)

  • 在iOS8 ..这将始终给0.请看这.... .... http://stackoverflow.com/questions/23784630/how-to-find-indexpath-for-tapped-button-in-tableview-using-seque/27292570#27292570 (3认同)