簡體   English   中英

從View Controller Swift更新集合視圖

[英]Update Collection View from View Controller Swift

我的storyboard有這個。

ViewController-> Tableview->自定義單元格

自定義單元格在集合視圖中。

在我的ViewController我有一些過濾器按鈕,我想過濾收集視圖的數組數據並重新加載它。

所以我試圖用下面的代碼制作一個委托方法

protocol ReloadTheDataDelegate: class {
    func reloadTheCV()
}


class NearMeViewController: UIViewController {
    weak var delegate: ReloadTheDataDelegate?

@IBAction func anAction(_sender : AnyObject){

requests.weekendEventData.sort() { $0.realDate < $1.realDate }
delegate?.reloadTheCV()

}

}


class WeekendTableViewCell: UITableViewCell, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource, UICollectionViewDelegate, ReloadTheDataDelegate  {

@IBOutlet public weak var weekendCV: UICollectionView!

func reloadTheCV() {
        print("done")  //never printed
        weekendCV.reloadData()
    }

    override func awakeFromNib() {
        super.awakeFromNib()


        if let myViewController = parentViewController as? NearMeViewController {
            myViewController.delegate = self
        }

        weekendCV.register(UINib(nibName: "WeekendCollectionViewCell", bundle: nil),
                           forCellWithReuseIdentifier: "phoneweekendcell")

        weekendCV.delegate = self
        weekendCV.dataSource = self
    }
}

還有我帶ViewController的擴展

extension UIView {
    var parentViewController: UIViewController? {
        var parentResponder: UIResponder? = self
        while parentResponder != nil {
            parentResponder = parentResponder!.next
            if let viewController = parentResponder as? UIViewController {
                return viewController
            }
        }
        return nil
    }
}

誰能解釋為什么從未調用過函數reloadTheCV()嗎?

NearMeViewController委托( ReloadTheDataDelegate )為nil 由於其不打印。 您沒有設置delegate ,這種方法也太復雜了。

因此,而不是采用protocol概念。 只需使用以下方式即可重新加載單元格的收集視圖。

在您的NearMeViewController上添加以下函數。 並在需要重新加載集合視圖時致電。

func reloadCellCV() {
        for cell in tableView.visibleCells {
            if let cell = cell as? WeekendTableViewCell {
                DispatchQueue.main.async {
                    cell.weekendCV.reloadData()
                }
            }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM