Estou com um problema UITableView's
didSelectRowAtIndexPath
.
Minha tabela está configurada para que, quando eu selecionar linha, inicialize um novo controlador de exibição e o empurre.
Na primeira vez que toco em qualquer linha da tabela, o método não é chamado. Depois de selecionar outra linha, ela começa a funcionar normalmente.
Eu verifiquei isso definindo um ponto de interrupção em didSelectRowAtIndexPath
. Ao adicionar um NSLog
ao método, vejo que, quando seleciono a segunda linha que finalmente empurra o novo controlador de exibição, vejo duas instruções de log sendo exibidas no console ao mesmo tempo.
Alguma sugestão?
uitableview
cocoa-touch
uikit
didselectrowatindexpath
Mark Adams
fonte
fonte
tableView:didSelectRowAtIndexPath:
?Respostas:
Alguma chance de você digitar acidentalmente De selectRowAtIndexPath?
fonte
Verifique também a propriedade de seleção da sua visualização de tabela no arquivo xib. Use 'Seleção Única' ou 'Seleção Múltipla', conforme necessário.
fonte
Tive o seguinte problema:
No meu caso, meu erro foi verificar
Show Selection on Touch
no Interface Builder. Você pode desmarcar no IB aqui:Espero que ajude alguém
fonte
Marque Se você definiu algum reconhecedor de gestos em sua classe. Remover o gesto funcionou para mim.
fonte
Eu debati até postar essa resposta porque acho que as estrelas se alinharam para que isso se manifestasse.
Estou tendo uma variação desse problema e verifiquei as outras soluções. Na minha exibição de tabela, ele não está processando a última linha da minha tabela no primeiro toque. Isso destaca, mas
didSelectRowAtIndexPath
não está sendo chamado. Todas as outras linhas funcionam bem. Mas se eu ativar o retorno da tableview, parece que ele resolverá o problema (mas você precisará lidar com o retorno da tableview).fonte
UITableViewCellSelectionStyleNone foi definido para a célula que exibe esse problema (ios9).
Acabei ligando
primeira coisa em
o que não é o mesmo, mas é bom o suficiente. me faz pensar que tipo de quebra de mesa o ios10 traz.
fonte
setSelected
mas enquanto o usuário está segurando o celular, aparece selecção que não é aceitávelSWIFT 2
Verifique se você definiu como verdadeiro:
self.tableView.allowsSelection = true
Coloque isso acima do seu direito, depois
viewDidLoad()
e antes dosuper.viewDidLoad()
fonte
SWIFT 3
Se você estiver trabalhando com o Swift 3 em uma classe que não seja
UITableViewController
e estiver usandoUITableViewDelegate
, poderá ser necessário usar o título do método:Isso funcionou para mim, embora eu tenha acabado de migrar meu projeto para o Swift 3. É relativamente novo, então isso pode ser corrigido mais tarde.
fonte
Se você configurou qualquer UITapGestureRecognizer em sua classe, poderá adicionar esta linha ao seu didSelectRowAtIndexPath:
Isso funcionou para mim.
fonte
este problema acontece também quando você está trabalhando com gesto reconhecedor dentro de um tableView neste caso, você não precisa removê-los, você só precisa ter certeza de que sua propriedade gesto
cancelsTouchesInView = false
este é um valor booleano que afetam se toques são entregues a uma visão quando um gesto é reconhecido.fonte
SWIFT 3
Nenhuma das outras respostas funcionou no meu caso, o que foi corrigido para mim foi:
tableView.delaysContentTouches = false
fonte
didSelectRowAt
função não foi chamada no meu aplicativo no primeiro ou segundo toque ... Eu estava tentando resolver o problema não conseguiu encontrar nenhuma solução. Mas de repente eu reconheci, estava usando o view.animation color change ... oDelegate
método não foi chamado enquanto a animação persistiafonte
No meu caso, eu tinha um cabeçalho de seção UITableView com um reconhecedor de gestos. Quando o cabeçalho é tocado, ele deve inserir algumas linhas nessa seção e animar a inserção (como expandir / recolher seção). Na primeira vez em que foi expandido e tocado, o método delegado didSelectRow não foi acionado. Para mais toques e ações de expansão / recolhimento, estava funcionando conforme o esperado.
Por resposta de @Ayoub Nouri, definai cancelsTouchesInView como false, e isso resolveu o problema. tapGestureRecognizer? .cancelsTouchesInView = false
fonte
Swift 4.2
A desativação do "Atraso no toque para baixo" no inspetor de atributos resolveu o problema.
Depois disso, os cliques são suaves e o didSelectRowAt é acionado imediatamente.
fonte
O que funcionou para mim foi começar a digitar "didSelect ..." e depois deixar a correção automática preencher o restante. Aparentemente, alguns detalhes da minha sintaxe eram instáveis. Como outros já disseram, use o IDE !!
fonte