0
votes

I have a subview within UITableViewCell's that contains a UILabel and a UIButton. When I push the button it unselects the UITableViewCell for some reason.

Is there a way to pass the touch event through to its super view? Or is there a different problem all together?

Here is the code for CellForRowAtIndexPath. I plan on creating a custom subclass of UITableViewCell so I can handle cell reuse properly so don't feel the need to mention that.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CountModel *cellModel = self.viewModel.data[indexPath.row];

    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"RootViewControllerMetricCell"];

    cell.textLabel.text = cellModel.title;

    // Custom background color for selection
    UIView *bgColorView = [[UIView alloc] init];
    bgColorView.backgroundColor = UIColorFromRGB(0xF3F3F3);
    bgColorView.layer.masksToBounds = YES;
    [cell setSelectedBackgroundView:bgColorView];

    // Construct subview and append to bottom (only visible when selected)
    UIView *cellSubView = [[UIView alloc] initWithFrame:CGRectMake(0, 125, cell.frame.size.width, 25)];

    // UILabel for display of current count
    UILabel *lblCount = [[UILabel alloc] initWithFrame:CGRectMake(15, 0, 25, 25)];
    lblCount.text = [NSString stringWithFormat:@"%d", [cellModel.count intValue]];

    // Create UIButton for incrementing
    UIButton *incrementButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    incrementButton.frame = CGRectMake(45, 0, 25, 25);
    [incrementButton setTitle:@"+" forState:UIControlStateNormal];

    // Enable touch event for button view
    [incrementButton addTarget:self action:@selector(countButtonTouchDown:) forControlEvents:UIControlEventTouchDown];

    [cellSubView addSubview:lblCount];
    [cellSubView addSubview:incrementButton];

    [cell addSubview:cellSubView];

    return cell;
}
1
So you want to interact with the button without changing the selected/ unselected state of the cell?Akshat Singhal
Yes that's exactly right - thanks!Jason Palmer

1 Answers

1
votes

How about you add the [self.tableView cellForRowAtIndePath:] setSelected:] inside the function responding to the button press to reinstate the same selected/ deselected state.

UPDATE:

Shift the code inside the didSelectCellAtIndexPath to another function, say performActionOnSelectionOfCellAtIndexPath and call performActionOnSelectionOfCellAtIndexPath from inside the didSelectCellAtIndexPath with the indexPath and also call performActionOnSelectionOfCellAtIndexPath from the function responding to the button press.