如何在swift中重新加载UICollectionReusableView中的集合视图

时间:2017-08-10 07:52:21

标签: ios swift uicollectionview

  1. 我在View控制器中有一个UICollectionView(名为aCollection),我使用UICollectionReusableView在集合视图的顶部显示标题

    enter image description here

  2. 我在UICollectionReusableView中还有另一个UICollectionView(名为bCollection)。我需要在这里显示顶级用户列表。但是当我试图从故事板连接插座时,我收到了错误

    enter image description here

  3. 我知道如何在集合视图中重新加载数据

    self.aCollection.reloadData()

  4. 我的问题是如何连接bCollection outlet以及如何重新加载bCollection以显示来自Web服务的用户列表?

2 个答案:

答案 0 :(得分:1)

要取bCollection的出口,您需要创建UICollectionReusableView的子类。

示例:

UIViewController包含aCollection

class ViewController: UIViewController, UICollectionViewDataSource
{
    @IBOutlet weak var aCollectionView: UICollectionView!

    override func viewDidLoad()
    {
        super.viewDidLoad()
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
    {
        return 10
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
    {
        return collectionView.dequeueReusableCell(withReuseIdentifier: "aCell", for: indexPath)
    }

    func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView
    {
        return (collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "reusableView", for: indexPath) as! ReusableView)
    }
}

UICollectionReusableView包含bCollection

class ReusableView: UICollectionReusableView, UICollectionViewDataSource
{
    @IBOutlet weak var bCollectionView: UICollectionView!

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
    {
        return 10
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
    {
        return collectionView.dequeueReusableCell(withReuseIdentifier: "bCell", for: indexPath)
    }
}

界面截图

enter image description here

修改

要重新加载bCollection

您需要引用您正在使用的reusableView。你使用它的方式ReusableView()是不对的。

像这样使用:

var reusableView: ReusableView?

func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView
{
    self.reusableView = (collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "reusableView", for: indexPath) as! ReusableView) //Storing the reference to reusableView
    return self.reusableView!
}

现在,要重新加载bCollection

    self.reusableView?.bCollectionView.reloadData()

答案 1 :(得分:0)

由于您的UICollectionViewbCollection)位于UICollectionReusableView内,您只能连接到UICollectionReusableView的课程。因此,我相信您可能需要为UICollectionReusableView创建自定义类,并将其分配到故事板中,并将bCollection的插座连接到该自定义类