在初始化

时间:2016-02-12 14:10:00

标签: ios swift uicollectionview lazy-loading

我在一个单独的视图上有一个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。我只是不希望uicollectionview在完成viewdidload调用时加载。我宁愿在点击按钮时加载此collectionview。我知道我可以通过使用collectionview.reloadData()重新加载它,但我应该如何在第一次加载时停止它。 任何帮助都会很明显。

3 个答案:

答案 0 :(得分:0)

您可以尝试此解决方案。

调用viewdidload委托方法时,不要填充项目。

a#links:link {
  color: red;
  text-decoration: none
}
a#links:visited {
  color: goldenrod;
  text-decoration: none
}
a#links:hover {
  color: maroon;
  text-decoration: none;
  font-variant: small-caps
}

点击按钮,点击项目和集合 view.reloadData()

这应该有用。

答案 1 :(得分:0)

从viewdidload中删除代码,使其在开头不加载。添加一个按钮并将其与按钮单击事件连接。在click事件中添加代码以加载uicollectionview。

试试这段代码:

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

}

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

答案 2 :(得分:0)

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

var renderCollection: bool = false

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

if !renderCollection return 0

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

renderCollection = true ; collectionView.reloadData();