Как получить indexPath в табличном представлении от действия кнопки в ячейке? - PullRequest
6 голосов
/ 17 сентября 2011

У меня есть табличное представление с двумя действиями, для первого я использую делегат didSelectRowAtIndexPath, для второго я хотел бы использовать действие над кнопкой в ​​моей ячейке, чтобы сделать что-то еще.Моя проблема в том, что мне не удается получить указатель пути?Как лучше всего это делать.

Ответы [ 5 ]

9 голосов
/ 17 сентября 2011

Если вы добавили кнопку в ячейку как,

[cell.contentView addSubview:button];

тогда вы можете получить путь индекса как,

- (void)onButtonTapped:(UIButton *)button {

    UITableViewCell *cell = (UITableViewCell *)button.superview.superview;
    NSIndexPath *indexPath = [tableView indexPathForCell:cell];
    // Go ahead
}
2 голосов
/ 21 ноября 2014

Я использую это решение - получение индекса пути ячейки с использованием точек

CGPoint center= [sender center];
CGPoint rootViewPoint = [[sender superview] convertPoint:center toView:_tableView1];
NSIndexPath *indexPath = [_tableView1 indexPathForRowAtPoint:rootViewPoint];
NSLog(@"%@",indexPath);

Его работа отлично

1 голос
/ 26 мая 2013

вот полный код для пользовательской кнопки:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    CustomCellFilter *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (!cell) {cell = [[CustomCellFilter alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];}

    //configure your cell here
    cell.titleLabel.text = @"some title";

    //add button
    UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];
    resetButton.frame = CGRectMake(40, 10, 18, 18);
    [resetButton addTarget:self action:@selector(onButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
    [resetButton setImage:[UIImage imageNamed:@"someimage.png"] forState:UIControlStateNormal];
    [cell.contentView addSubview:myButton];

    //afterwards return the cell
    return cell;

- (void)onButtonTapped:(UIButton *)button {

    UITableViewCell *cell = (UITableViewCell *)button.superview.superview;
    NSIndexPath *indexPath = [filterTable indexPathForCell:cell];
    NSLog(@"%@", indexPath);
    //use indexPath here...
}
0 голосов
/ 11 декабря 2014

Если вы используете представление коллекции, вы можете использовать метод Йогеша, но измените indexPathForRowAtPoint для indexPathForItemAtPoint следующим образом:

CGPoint center= [sender center];
CGPoint rootViewPoint = [[sender superview] convertPoint:center toView:_tableView1];
NSIndexPath *indexPath = [_tableView1 indexPathForRowAtPoint:rootViewPoint];
NSLog(@"%@",indexPath);
0 голосов
/ 17 января 2014

В случае, если ваша кнопка перемещена или Apple меняет иерархию представлений для дополнительных представлений, этот метод идет вверх по цепочке в поисках UITableViewCell:

- (void)tapAccessoryButton:(UIButton *)sender {
    UIView *parentView = sender.superview;

// the loop should take care of any changes in the view heirarchy, whether from
// changes we make or apple makes.
    while (![parentView.class isSubclassOfClass:UITableViewCell.class])
        parentView = parentView.superview;

    if ([parentView.class isSubclassOfClass:UITableViewCell.class]) {
        UITableViewCell *cell = (UITableViewCell *) parentView;
        NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
        [self tableView:self.tableView accessoryButtonTappedForRowWithIndexPath:indexPath];
    }
}
...