Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Click no Pacote não está disparando

Ola,

Após a implementação do Código dado em aula, notei que não está acontecendo o evento didDeselectItemAt na listagem de pacotes, segue código:

//
//  PacotesViagensViewController.swift
//  Alura Viagens
//
//  Created by Guilherme Golfetto on 04/01/21.
//

import UIKit

class PacotesViagensViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout,UICollectionViewDelegate, UISearchBarDelegate {

    @IBOutlet weak var pacotesViagem: UICollectionView!

    @IBOutlet weak var pesquisarViagens: UISearchBar!

    @IBOutlet weak var labelContadorPacotes: UILabel!
    let listaComTodasViagens:Array<Viagem> = ViagemDAO().retornaTodasAsViagens();

    var listaViagens:Array<Viagem> = []


    override func viewDidLoad() {
        super.viewDidLoad()
        listaViagens = listaComTodasViagens;
        pacotesViagem.dataSource = self
        pacotesViagem.delegate = self;
        pesquisarViagens.delegate = self;
        self.labelContadorPacotes.text = self.atualizaContagemLabel();
    }




    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return self.listaViagens.count;
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let celulaPacote = collectionView.dequeueReusableCell(withReuseIdentifier: "celulaPacote", for: indexPath) as! PacoteViagemCollectionViewCell;

        let viagem = listaViagens[indexPath.row];

        celulaPacote.labelTitulo.text = viagem.titulo;
        celulaPacote.labelQuantidadeDias.text = "\(viagem.quantidadeDeDias) dias";
        celulaPacote.labelPreco.text = "R$ \(viagem.preco)";
        celulaPacote.imagemViagem.image = UIImage(named: viagem.caminhoDaImagem);

        celulaPacote.layer.borderWidth = 0.5;
        celulaPacote.layer.borderColor = CGColor(red: 85.0/255.0, green: 85.0/255.0, blue: 85.0/255.0, alpha: 1);
        celulaPacote.layer.cornerRadius = 8

        return celulaPacote;
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        //dividido por dois porque são duas colunas
        let larguraCelula = collectionView.bounds.width / 2;
        return CGSize(width: larguraCelula - 15, height: 160)
    }


    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        print("Clicou em uma viagem");
    }

    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        listaViagens = listaComTodasViagens;
        if searchText != "" {
            //o [c] é para virar case insetive
            //o [d] é para ignorar a acentuação
            let filtroListaViagem = NSPredicate(format: "titulo contains[c] %@", searchText);

            let listaFiltrada:Array<Viagem> = (listaViagens as NSArray).filtered(using: filtroListaViagem) as! Array;

            listaViagens = listaFiltrada;
        }

        self.labelContadorPacotes.text = self.atualizaContagemLabel();
        pacotesViagem.reloadData();
    }

    func atualizaContagemLabel() -> String {
        return listaViagens.count == 1 ? "1 pacote encontrado" : "\(listaViagens.count) pacotes encontrado";
    }

}

achei que poderia ser alguma coisa referente ao Swift 4 como foi no NSPredicate, mas o evento simplesmente não dispara no console o print.

Alguém poderia me ajudar??

1 resposta
solução!

Acho que nunca saberemos o porque que isso não estava funcionando.

minha solução foi apagar o projeto, baixar novamente do repositório da Alura e ir aula por aula até chegar aqui e simplesmente funciona.

anyways.