Переменные Swift при сбросе Collectionviewcontroller после вызова функции извне - PullRequest
1 голос
/ 03 мая 2020

Когда я вызываю функцию на CollectionCiewController с кнопкой на CollectionViewHeader, все переменные равны nil на c.view. Я не мог выяснить, в чем проблема.

 @IBAction func loadmore(_ sender: Any) {
        CollectionViewController().goNetwork()  
    }

называется fun c:

import UIKit

class CollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout {
 var query: QueryForUnogs!
 var dataSource = [REsult]() {
        didSet {
            DispatchQueue.main.async {
                self.collectionView.reloadData()
            }
        }
    }
override func viewDidLoad() {
        super.viewDidLoad()
        self.goNetwork()
}

func goNetwork() {
        var urlWithParams: String = "https://unogsng.p.rapidapi.com/search?start_year=\(query.minYear!)&end_year=\(query.maxYear!)&start_rating=\(query.minImdb!)&offset=\(self.offset.description)&type=\(query.type!)&end_rating=10&countrylist=\(query.cc!)&orderby=\(query.orderby!)&audio=\(query.audio!)&subtitle=\(query.subtitle!)"

    NetworkService().downloadUnogs(_qu: urlWithParams) { result in
        switch result {
        case .failure(let error): print(error)
        case .success(let RR):
        self.dataSource = RR.results!
}}}}

1 Ответ

1 голос
/ 03 мая 2020

Вы вызываете функцию для нового экземпляра CollectionViewController, поэтому получите все ноль ... получите текущий CollectionViewController через делегата и вызовите goNetwork для этого существующего CollectionViewController объекта

Напишите протокол как this

protocol CollectionHeaderViewDelegate {
  func didTapButton()
}

Запись CollectionReusableView класс с делегатом

class CollectionReusableView: UICollectionReusableView {

  @IBOutlet weak var loadBtn: UIButton!
  var delegate: CollectionHeaderViewDelegate?

  @IBAction func loadmore(_ sender: Any) {
    delegate?.didTapButton()

  }

}

И в вашем основном классе контроллера, который является CollectionViewController Запись этой функции

override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    if (kind == UICollectionView.elementKindSectionFooter) {
      let footerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "LoadFooter", for: indexPath) as! CollectionReusableView
      footerView.delegate = self
      return footerView

    }
    fatalError()

  }

Запись расширение CollectionViewController и подтверждение его с помощью протокола

extension CollectionViewController: CollectionHeaderViewDelegate {
  func didTapButton() {
     goNetwork()
  }


}

Теперь у вас есть goNetwork в вашем главном контроллере .... он будет загружать содержимое автоматически ...

спасибо

...