如何在自定义UITableViewCell中按下UIButton时获取indexPathForSelectedRow

时间:2014-10-18 06:29:02

标签: ios objective-c uitableview uibutton

我无法通过按下自定义UITableViewCell内的按钮来弄清楚如何获取所选行的indexPath。

我的cellForRowAtIndexPath:

self.rCell.reportUserButton.tag = indexPath.row;

,在我的prepareForSegue中:

ReportUserViewController *reportUserVC = segue.destinationViewController;

reportUserVC.message = [self.receivedMessages objectAtIndex:self.rCell.reportUserButton.tag];

这是我的问题......
self.rCell.reportUserButton.tag设置为视图中最后一个单元格的值。

如果我想要第一个单元格,则始终设置最后一个单元格。

如何获取具有活动报告用户按钮的单元格的indexPath ????

3 个答案:

答案 0 :(得分:0)

您应该在点击delegate method时使用cell button来告诉它tableViewController

@protocol cellDelegate <NSObject>

-(void)calledOnButtonClick:(CustomCell *)cell;

@end

然后在按钮上,单元格的Click事件调用委托

if ([delegate respondsToSelector:@selector(calledOnButtonClick:)]) 
{
    [delegate calledOnButtonClick:self];
}

现在在你的tableViewController

-(void)calledOnButtonClick:(CustomCell *)cell
{
    NSIndexPath *iPath = [_tableView indexPathForCell:cell];
}

它会为您提供正确的索引路径

答案 1 :(得分:0)

cellForRowAtIndexPath调用在表视图中创建并重用单元格时,您可以像下面的代码一样分配值,这意味着只有最后重用的单元格indexPath分配给您的单元格。

self.rCell.reportUserButton.tag = indexPath.row;

在单元格中使用delegate传递值

// In CustomCell Class
@protocol yourdelegate <NSObject>

-(void)passCellIndexAction:(CustomCell *)cell;

@end

-(void)buttonClickAction
{
   [delegate passCellIndexAction: self];
}

// In View controller class
-(void)passCellIndexAction:(CustomCell *)cell
{
ReportUserViewController *reportUserVC = segue.destinationViewController;
reportUserVC.message = [self.receivedMessages objectAtIndexcell.reportUserButton.tag];
}

答案 2 :(得分:0)

还有另一种方法:

- (NSIndexPath *)indexPathForRowAtPoint:(CGPoint)point

例如,如果使用自定义详细信息按钮和 segue 从该按钮到详情视图:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([segue.identifier isEqualToString:@"news-detail"]){

        NSIndexPath *indexPath = [self.myTableView indexPathForRowAtPoint: ((UIButton *)sender).superview.superview.center];
        NSArray *keys = [self.dataSource allKeys];
        NSDictionary *newsItem =  [[self.dataSource objectForKey:[keys objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row]; ;

        [(MyDetail_ViewController *) segue.destinationViewController setDataItem:newsItem];
    }
}