Ios 如何在加载自定义函数后初始化collectionView
我在Ios 如何在加载自定义函数后初始化collectionView,ios,swift,function,asynchronous,viewcontroller,Ios,Swift,Function,Asynchronous,Viewcontroller,我在class MoviesViewController:UIViewController、UICollectionViewDelegateFlowLayout、UICollectionViewDataSource、UIScrollViewDelegate{ 这个函数是自动初始化的,我不想自动启动。或者在它加载完一个加载外部数据的函数后启动 这是我的ViewController.swift的结构代码 class MyViewController: UIViewController, UIColl
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)
}
在这里,funcCollectionView
init自动启动
//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
之前启动?或者在您从loadData
调用函数之前不启动ViewController
当您还没有项目时,您不应该关心集合视图加载项目。可能发生的最坏情况是什么都不显示
但是,当数据加载完毕后,应调用collectionView.reloadData
,以显示刚从服务器加载完毕的数据
如果您不希望在数据仍在加载时显示收集视图,只需在完成处理程序中设置collectionView.hidden=true
,然后设置collectionView.hidden=false
。您可能还应该显示一个活动指示器(例如UIActivityIndicator
实例)通知用户仍在加载数据
此外,我还建议不要从viewdiload
加载数据。您应该使用viewdilease
当您还没有项目时,您不应该关心集合视图加载项目。可能发生的最坏情况是什么也不显示
但是,当数据加载完毕后,应调用collectionView.reloadData
,以显示刚从服务器加载完毕的数据
如果您不希望在数据仍在加载时显示收集视图,只需在完成处理程序中设置collectionView.hidden=true
,然后设置collectionView.hidden=false
。您可能还应该显示一个活动指示器(例如UIActivityIndicator
实例)通知用户仍在加载数据
另外,我建议不要从viewDidLoad
加载数据。您应该使用viewDidAppear
为什么在同一个视图中同时使用scrollview和collection视图?这是我从这里得到的结构。它工作正常,但我需要更改它。CollectionView位于scrollview中。这就是为什么会自动启动?您可以在loadData()之后加载集合视图
函数完成获取网络数据。另一件事我没有找到-collectionView:numberofitemsinssection:
的实现,它告诉集合视图将呈现多少项,当您没有数据时,它应该首先返回0
。实现-collectionView:numberofitemsinssection:
在您的数据中导入并从中返回0
(当没有可用数据时)停止调用cellForItemAtIndexPath
?为什么将scrollview和collection视图都放在同一个视图中?这是我从这里得到的一个结构。它工作正常,但我需要更改它。CollectionView位于scrollview中。这就是为什么会自动启动?您可以在loadData()之后重新加载collection视图
函数完成获取网络数据。另一件事我没有找到-collectionView:numberofitemsinssection:
的实现,它告诉集合视图将呈现多少项,当您没有数据时,它应该首先返回0
。实现-collectionView:numberofitemsinssection:
在您的数据中,从中导出并返回0
(当没有可用数据时),停止调用cellForItemAtIndexPath
?