indexPathForRowAtPoint retorna nulo apenas para a primeira célula em uma visualização uitabl
eu tenho umUIButton
dentro de um costumeUITableViewCell
que remove a célula quando o botão é pressionado. Para obter o indexPath da célula em que o botão está, estou chamandoindexPathForRowAtPoint
: em um método chamado quando o botão é pressionado da seguinte maneira:
-(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.
}
}
Isso funciona bem se eu pressionar o botão em qualquer célula, exceto a primeira, e também quando, se houver APENAS uma célula na tabela. No entanto, se houver várias células e eu pressionar o botão na primeira célula, o pressionamento do botão será acionado e a btnPosition será encontrada, mas[self.tableView indexPathForRowAtPoint:btnPosition];
retornanil
.
Por exemplo, se houver três células, cada uma com um botão:
Eu pressiono o primeiro botão da célula:buttonPressed é chamado, mas indexPath é nulo, então nada acontece.Eu pressiono o botão da terceira célula:buttonPressed é chamado e a célula é removida conforme o esperado.Eu pressiono a primeira célula novamente:igual a antes, buttonPressed chamado, mas indexPath é nulo.Eu pressiono o segundo botão da célula:buttonPressed é chamado e a célula é removida conforme o esperado.Eu pressiono o primeiro botão da célula:Dessa vez, buttonPressed é chamado, indexPath não é nulo e a célula é removida conforme o esperado.Verifiquei que o tableView não é nulo, conforme sugerido por uma postagem relacionada, mas diferente. Eu também confirmei que o pontobtnPosition
está definido com o mesmo valor(x=260, y=44.009995)
ambos quando[self.tableView indexPathForRowAtPoint:btnPosition] == nil
E quando[self.tableView indexPathForRowAtPoint:btnPosition] != nil
.
Portanto, além de perguntar se alguém tem alguma idéia do que poderia estar acontecendo aqui, minha pergunta é:
Em que circunstâncias poderia passar o mesmo CGPoint para[self.tableView indexPathForRowAtPoint:btnPosition]
retornar um diferente (ou nulo)indexPath
?
Agradeço a ajuda com todas as idéias de onde posso procurar rastrear isso ou saber se alguém encontrou um problema semelhante.
Algumas notas adicionais que podem ser úteis (desculpe-me se eu fizer uma pergunta que faça faux-pas. Ficarei feliz em receber seus comentários sobre isso também :)
Este tableView faz parte de umUITableViewController
que é incorporado em umUINavigationController
O tableView tem 3 seções, 2 das quais estão ocultas da visualização (0 linhas, sem rodapé, sem cabeçalho) enquanto eu estou apresentando a seção com as linhas da célula de botão, conforme descrito.
Estou ajustando a localização dos botões durante a apresentação alterando programaticamente suas restrições horizontais.
As alturas do meucustomUITableViewCell
, tableViewRows
eUIButton
são cada um iguais a 60.0f