Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

LongPress sempre está exibindo informaçoes do primeiro elemento da lista

@objc func abrirActionSheet(_ longPress:UILongPressGestureRecognizer) {
    if longPress.state == .began {
            guard let alunoSelecionado = gerenciadorDeResultados?.fetchedObjects?[(longPress.view?.tag)!] else { return }
            print(alunoSelecionado.nome)
}
}

No metodo abrirActionSheet, que trata o gesture de LongPress, sempre esta trazendo o primeiro aluno da lista como sendo o alunoSelecionado. Baixei o projeto final da aula 4 e está com esse problema. Isso pode ser visto é dado um print no alunoSelecionado e também ao exibir o alunoSelecionado no mapa. Sempre obtemos o primeiro aluno da lista.

Estou fazendo algo errado?

3 respostas
solução!

Oi Romulo, tudo bem?

Ótima observação.

Sua implementação está correta.

Para solucionar esse bug, basta você setar a tag de cada célula no método cellForRowAt indexPath

Ficaria assim:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let celula = tableView.dequeueReusableCell(withIdentifier: "celula-aluno", for: indexPath) as! HomeTableViewCell
        celula.tag = indexPath.row
        let longPress = UILongPressGestureRecognizer(target: self, action: #selector(abrirActionSheet(_:)))
        guard let aluno = gerenciadorDeResultados?.fetchedObjects![indexPath.row] else { return celula }
        celula.configuraCelula(aluno)
        celula.addGestureRecognizer(longPress)

        return celula
    }

Com o celula.tag = indexPath.row conseguimos setar um identificador diferente para cada célula.

Veja se funciona aí ;)

Abs.

Fala Ândriu!

Agora sim está tudo funcionado. Obrigado :)

Aproveito para dizer que o curso está muito bom e objetivo. Teremos a continuação do curso, algo como "iOS parte 2"? :D

Abraço.

Oi Romulo,

Que bacana que está gostando!

Já temos a parte II:

https://cursos.alura.com.br/course/ios-recursos-nativos-2

Deixa seu feedback depois ;)

Abs.