I have a UITableView with UITableViewCells that are swipable. When a cell is swiped, I want a view to be visible (revealed) underneath that cell. Here’s the code that I have:
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
_cellBack = [[UIView alloc] initWithFrame:CGRectMake(0, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)];
_cellBack.backgroundColor = [UIColor whiteColor];
[self.tableView insertSubview:_cellBack belowSubview:cell];
for (int i = 0; i < [self.tableView subviews].count; i++) {
UIView *v = [[self.tableView subviews] objectAtIndex:i];
if ([v isEqual:_cellBack]) {
NSLog(@"cellBack %d", i);
}
if ([v isEqual:cell]) {
NSLog(@"cell %d", i);
}
}
In the for loop, I check to see if the views’ indexes are as I expect, and indeed they are; _cellBack has an index that is one less than cell‘s index.
When I replace the insertSubview:belowSubview: call with insertSubview:aboveSubview:, it works fine (albeit with the white UIView showing up above the swiped cell), so it’s not a matter of not allocating _cellBack properly. I’ve also tried insertSubview:atIndex: and that didn’t work either..
What could be causing this?
Thanks!
So it turns out that, if I add it to another view, the code works as expected.
Here’s where I added it:
I’m still not sure why the code in the question doesn’t work. The
SideSwipeTableViewfrom this github account has code similar to what I had before and it works fine.