I have a UIButton
inside of a custom UITableViewCell
that removes the cell when the button is pressed. In order to get the indexPath of the cell the button is in, I'm calling indexPathForRowAtPoint
: in a method called when the button is pressed as follows:
-(void)buttonPressed:(UIButton *)sender{
CGPoint btnPosition = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:btnPosition];
if (indexPath != nil)
{
//remove the cell from the tableview.
}
}
This works fine if I press the button in any cell except the first cell, and also when if there is ONLY one cell in the table. However, if there are multiple cells and I press the button in the first cell, the button press is triggered and the btnPosition is found, but [self.tableView indexPathForRowAtPoint:btnPosition];
returns nil
.
For example, if there are three cells, each with a button:
- I press the first cell button: buttonPressed is called but indexPath is nil, so nothing happens.
- I press the third cell button: buttonPressed is called and the cell is removed as expected.
- I press the first cell again: same as before, buttonPressed called but indexPath is nil.
- I press the second cell button: buttonPressed is called and the cell is removed as expected.
- I press the first cell button: This time, buttonPressed is called, indexPath is not nil and the cell is removed as expected.
I've checked that the tableView is not nil, as suggested by a related, but different, post. I've also confirmed that the point btnPosition
is set to the same value (x=260, y=44.009995)
both when [self.tableView indexPathForRowAtPoint:btnPosition] == nil
AND when [self.tableView indexPathForRowAtPoint:btnPosition] != nil
.
So aside from asking if anyone has any ideas on what could be happening here, my question is:
Under what circumstances could passing the same CGPoint to [self.tableView indexPathForRowAtPoint:btnPosition]
return a different (or nil) indexPath
?
I'd appreciate help with any ideas of where I might look to track this down, or to hear if anyone has encountered a similar issue.
Some additional notes that might be helpful (please excuse if I make a question asking faux-pas. I'll happily take your feedback about that as well :)
This tableView is part of a UITableViewController
which is embedded in a UINavigationController
The tableView has 3 sections, 2 of which are hidden from view (0 rows, no footer, no header) while I'm presenting the section with the button cell rows as described.
I'm adjusting the location of the buttons during presentation by programmatically changing their horizontal constraints.
The heights of my customUITableViewCell
, tableViewRows
and UIButton
are each equal to 60.0f
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…