我想将NSIndexPath传递给@selector。 所以我使用了以下代码,但没有像object这样的参数。 我该怎么办?
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(nonnull NSIndexPath *)indexPath{
// User taps expanded row
if (selectedIndex == indexPath.row){
selectedIndex = -1;
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationFade];
}
// User taps different row
if (selectedIndex != -1){
NSIndexPath *prevPath = [NSIndexPath indexPathForRow:selectedIndex inSection:1];
selectedIndex = (int)indexPath.row;
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:prevPath, nil] withRowAnimation:UITableViewRowAnimationFade];
}
// User taps new row with unexpanded
selectedIndex = (int)indexPath.row;
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationFade];
[favoriteButton addTarget:self action:@selector(favoritePressed:) withObject:indexPath forControlEvents:UIControlEventTouchDown];
[normalButton addTarget:self action:@selector(normalPressed) forControlEvents:UIControlEventTouchDown];
[halfButton addTarget:self action:@selector(halfPressed) forControlEvents:UIControlEventTouchDown];
}
-(void)favoritePressed:(NSIndexPath *)path{
}
答案 0 :(得分:1)
有一种更好的方法可以做到这一点。您可以在按钮上找到触摸点并将该触摸点转换为您的表格框架,然后通过该点您可以获得索引路径。
-(void)favoritePressed:(UIButton *)sender{
CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableview];
NSIndexPath *indexPath = [self.tableview indexPathForRowAtPoint:buttonPosition];
}
答案 1 :(得分:0)
试试这样:
NULL
注意:强>
如果在CustomCell的内容视图中设置按钮,这将对您有用,否则您需要添加其他超级视图以获取该单元格。
答案 2 :(得分:0)
下面的代码可能适用于某些条件,但您的按钮可能是单元格内的其他视图。在这种情况下,您可能找不到该单元格。
CustomCell *cell = (CustomCell) [[sender superview] superview];
最好像这样使用它。
- (void)btnFavoriteTapped:(UIButton *)sender {
id view = [sender superview];
while ([view isKindOfClass:[CustomCell class]] == NO) {
view = [view superview];
}
CustomCell *selectedCell = (CustomCell *)view;
NSIndexPath *indexPath = [self.tableView indexPathForCell:selectedCell];
}