如何在加载自定义函数后初始化collectionView

时间:2016-02-01 15:30:15

标签: swift function viewcontroller complete

func collectionView

中的class MoviesViewController: UIViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource, UIScrollViewDelegate {内部存在问题

此功能自动启动,我不想自动启动。或者在加载加载外部数据的函数时执行此操作。

这是我的结构代码ViewController.swift

class MyViewController: UIViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource, UIScrollViewDelegate {
  @IBOutlet var scrollView : UIScrollView!
  @IBOutlet var collectionView1 : UICollectionView!

这是我希望在CollectionView

之前加载的功能
func loaddata(){
  let url: NSURL = NSURL(string: "http://www.mywebsite/testdata.php")!
  let request:NSMutableURLRequest = NSMutableURLRequest(URL:url)
  let bodyData = "data=something"
  request.HTTPMethod = "POST"

  request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding);
  NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {
  (response, data, error) in
    let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)!               
  }
}

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

override func viewDidLayoutSubviews() {
  self.scrollView!.contentSize = CGSizeMake(1920, 2200)
}

在这里,func CollectionView自动启动

//this is function that load automatically
func collectionView(collectionView: UICollectionView,
  layout collectionViewLayout: UICollectionViewLayout,
  insetForSectionAtIndex section: Int) -> UIEdgeInsets {
  return UIEdgeInsets(top: 0.0, left: 50.0, bottom: 0.0, right: 50.0)
}

// this is function load automatically
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
  if (collectionView == self.collectionView1) {
    let cell : FeaturedCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier(self.reuseIdentifierFeatured, forIndexPath: indexPath) as! FeaturedCollectionViewCell
    let  imageFilename = "featured-\(indexPath.row).jpg"
    cell.featuredImage.image = UIImage(named: imageFilename)
    return cell
  }
  return UICollectionViewCell()
}

如何在ViewController之前保持loadData开始?或者ViewControllerloadData

调用该函数之前无法启动

1 个答案:

答案 0 :(得分:0)

当您还没有物品时,您不应该关心集合视图加载项目。可能发生的最坏情况是没有显示任何内容。

但是,当您的数据完成加载时,您应该调用collectionView.reloadData来显示刚刚从服务器加载的数据。

如果您还不希望在数据仍然加载时显示集合视图,只需在完成处理程序中设置collectionView.hidden = true然后collectionView.hidden = false即可。您可能还应该显示活动指示符(例如UIActivityIndicator实例)以通知用户数据仍在加载。

另外,我建议不要从viewDidLoad加载数据。您应该使用viewDidAppear