UICollectionViewCell не активируется после получения данных JSON с сервера - PullRequest
0 голосов
/ 30 апреля 2018

Я довольно новичок в Swift 4, пришел из Android Studio в Xcode.

У меня проблема с коллекционными представлениями, дело в том, что я заполняю декодируемую структуру предварительно определенными данными в ячейке, по которой она кликабельна и передается в функцию didSelectItemat. Но когда я получаю указанные данные из JSON с сервера, это не так.

У меня вопрос, есть ли что-то, что проходит через мою голову, или я что-то упускаю.

Вот код, который я использую:

struct SelectJogos: Decodable { пусть успехов: бул пусть Jogos: [Jogos] }

struct Jogos: Decodable{
    let NumJogo: Int
    let EquipaA: String
    let EquipaB: String
    let Fase: String
    let Serie: String
    let CodComp: String
    let Data: String
    let Hora: String
    let Local: String
}

class SubmeteController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {

    @IBOutlet weak var collectionView: UICollectionView!
    var jogo = [Jogos]()

    override func viewDidLoad() {
        super.viewDidLoad()

         collectionView.dataSource = self

        //User em sessão
        let user = UserDefaults.standard.string(forKey: "username")
        print(user!)

        //MandaPost para o server
        let url = URL(string: "http://yourexemple.com/something")
        var request = URLRequest(url: url!)
        request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
        request.httpMethod = "POST"
        let postString = "clube=\(user!)&opera=select"
        request.httpBody = postString.data(using: .windowsCP1252)

        //Receve a info do sv
        let task = URLSession.shared.dataTask(with: request){data, request, error in
            guard let data = data, error == nil else{
                print("error=\(error!)")
                return
            }
            do{
                let dataServer = try JSONDecoder().decode(SelectJogos.self, from: data)
                if dataServer.success != false{
                    self.jogo = dataServer.jogos
                    print(dataServer.success)
                }else{
                    print("nogames")
                }

                DispatchQueue.main.async {
                    print("Number of Data:\(self.jogo.count)")
                    self.collectionView.reloadData()
                }
            }catch let jsonERR{
                print("Error DO: ", jsonERR)
            }   
        }
            task.resume()
}
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        print("clicked")
    }
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return jogo.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "customCell", for: indexPath) as! SubmeteListaViewCell
        cell.NumJogo.text = String(jogo[indexPath.row].NumJogo)
        print(jogo[indexPath.row].CodComp)
        print(indexPath)
        return cell
    } 
}

1 Ответ

0 голосов
/ 30 апреля 2018

Вы должны установить делегата в viewDidLoad `

collectionView.delegate = self
...