我无法通过按下自定义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 ????
答案 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];
}
}