初始化时停止加载 UICollectionView

stop UICollectionView from loading while initializing

我在单独的视图上有一个 UICollectionView 让我们说 "dashboardView" 下面给出了部分代码,

class DashBoardView: UIView
{
 @IBOutlet weak var collectionView: UICollectionView!
  override func awakeFromNib() {
        collectionView.dataSource=self
        collectionView.delegate=self
        let nibLineChart = UINib(nibName: "GraphCell", bundle: nil)
        collectionView.registerNib(nibLineChart, forCellWithReuseIdentifier:lineChartIdentifier )
    }
}

现在这个视图被嵌入到一个 UIViewController 中,下面给出了示例代码,

class ViewController : UIViewController
{
override func viewDidLoad() {
        super.viewDidLoad()
        graphicalDashBoardView = DashBoardView.instanceFromNib() as! DashBoardView
        }

}

现在 viewdidload 调用完成后它会做什么,它会尝试在内部视图中呈现 UIcollectionView 并调用 cellForItemAtIndexPath。我只是不想在完成 viewdidload 调用时加载 uicollectionview。我宁愿在单击按钮时加载此 collectionview。我知道我可以使用 collectionview.reloadData() 重新加载它,但是我应该如何在第一次加载时停止它。 任何帮助将不胜感激。

您可以试试这个解决方案。

调用viewdidload委托方法时不填写项目

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

点击按钮填写项目 collection view.reloadData().

这应该有效。

从您的 viewdidload 中删除代码,这样它就不会在开始时加载。添加一个按钮并将其与按钮单击事件相关联。在点击事件中添加代码以加载 uicollectionview。

试试这个代码:

class ViewController : UIViewController
{
     override func viewDidLoad() {
        super.viewDidLoad()   
     }

}

@IBAction func buttonPressed(sender: AnyObject) {
    graphicalDashBoardView = DashBoardView.instanceFromNib() as! DashBoardView
}

不是说它很优雅,但你可以做一个

var renderCollection: bool = false

并在您的 numberOfSectionsInCollectionView 和 numberOfItemsInSection 函数中添加

if !renderCollection return 0

直到你想要加载集合的那一刻你会做

renderCollection = true ; collectionView.reloadData();