2016-02-01 1 views
1

У меня есть проблема с func collectionView внутри в class MoviesViewController: UIViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource, UIScrollViewDelegate {Как инициализировать CollectionView после загрузки пользовательской функции

Этой функции INIT автоматически, и я не хочу, чтобы начать автоматически. Или сделать это, когда он завершил загрузку функции, загружающей внешние данные.

Это моя структура код 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) 
} 

И здесь, функ CollectionView 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 sta rt до loadData? Или до ViewController не начинаются до тех пор, пока вы не вызовете функцию от loadData

+0

Почему у вас есть просмотр scrollview и коллекции как в одном представлении? –

+0

Это структура, которую я получаю отсюда. Он работает хорошо, но мне нужно его изменить. CollectionView находится в ScrollView. Вот почему начинается автоматически? – OscarM

+0

вы можете перезагрузить представление коллекции после того, как функция 'loadData()' завершает выборку сетевых данных. другое дело, я не нашел реализацию '-collectionView: numberOfItemsInSection:', которая сообщает коллекции, сколько элементов будет отображаться, оно должно возвращать '0' initiailly, когда у вас нет данных. –

ответ

0

Вам не нужно заботиться о том, чтобы элементы коллекции собирались, когда у вас еще нет товаров. Наихудший случай, который может произойти, состоит в том, что ничего не отображается.

Однако, когда ваши данные заканчиваются загрузкой, вы должны позвонить collectionView.reloadData, чтобы отобразить только что загруженные вами данные с сервера.

Если вы не хотите, чтобы просмотр коллекции вообще отображался, когда данные все еще загружаются, просто установите collectionView.hidden = true, а затем collectionView.hidden = false в вашем обработчике завершения. Вероятно, вы также должны отобразить индикатор активности (например, UIActivityIndicator экземпляр), чтобы сообщить пользователю, что данные все еще загружаются.

Также я бы посоветовал не загружать данные с viewDidLoad. Вы должны использовать viewDidAppear.

+0

Большое спасибо! это работает для меня;) – OscarM

 Смежные вопросы

  • Нет связанных вопросов^_^