如何使用addTarget方法传递NSIndexPath对象?

时间:2016-06-08 07:18:28

标签: ios objective-c iphone

我想将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{
}

3 个答案:

答案 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];
}