5
respostas

SearchBar não está filtrando os pacotes

Olá, bom dia.

Eu estava com o mesmo problema dos tópicos acima (crash no titulo), mas já foram resolvidos, porém apareceu outro: quando eu rodo o app e vou escrever uma cidade para filtrar, o mesmo não ocorre.

Segue o código:

  func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

        pacotes = todosPacotes

        if searchText != "" {

            let filtroViagem = NSPredicate(format: "titulo contains[c] %@", searchText)
            let listaFiltrada:Array<Viagem> = (todosPacotes as NSArray).filtered(using: filtroViagem) as! Array

            pacotes = listaFiltrada

        }

        collectionView.reloadData()
    }

Podem me ajudar? Agradeço.

5 respostas

Olá Adria

Vc poderia filtrar diretamente todos os pacotes com o método filter. ele ja devolveria um array de Viagens e não precisaria fazer essa conversão.

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    pacotes = todosPacotes
    if searchText != "" {
      pacotes = pacotes.filter({ $0.titulo.contains(searchText) })
    }
    collectionView.reloadData()
  }

Olá!!

Então, o meu está "filtrando". Eu consigo perceber isso pois, quando eu escrevo na searchBar a palavra "Bu", a minha label de "6 pacotes encontrados" altera para "1 pacote encontrado", porém, a collection continua mostrando as seis células mesmo com o collectionView.reloadData() adicionado.

Oi Adria, tudo bem?

Você está substituindo o array que é utilizado para renderizar os itens da collection view pela nova lista filtrada?

Abs.

Oi, Ândriu. Eu consegui filtrar agora.

Na verdade, acho que foi um erro meu mesmo. O meu return do numberOfItemsInSection estava "todosPacotes.count", porém era "pacotes.count".

Rodei e funcionou :) abs.

Ótimo!

Imaginei que fosse isso hahaha

Abs.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software