2017-02-16 3 views
0

У меня есть представление коллекции, встроенное в табличный вид, чтобы оно прокручивалось по вертикали и по горизонтали. Он состоит из четырех разделов: «Сегодня, на этой неделе, в этом месяце», в этом году. У меня возникли проблемы с пониманием того, как заполнить каждый раздел своими собственными данными. Сейчас я использую приведенный ниже код для заполнения коллекции, но все разделы имеют одинаковые данные. Как я могу заполнить каждый раздел своими собственными данными?Заселение каждой части коллекционного представления независимо Swift

Так что, если бы у меня был массив изображений для Today, массив изображений для этой недели, массив изображений для этого месяца и массив изображений для этого года, как я могу установить вид изображения в его разделе к элементам в соответствующем массиве? Так что сегодня должны иметь изображения в todayImageArray, на этой неделе должны быть образы в thisWeekImageArray и т. Д.

Также у меня есть делегат и источник данных вида коллекции, установленного в виде таблицы.

Любая помощь очень ценится!

let images: [[UIImage]] = [ 
    [image_1, image_2, image_3, image_4], 
    [image_5, image_6, image_7, image_8], 
    [image_9, image_10, image_11, image_12], 
    [image_13, image_14, image_15, image_16] 
]  

func numberOfSections(in collectionView: UICollectionView) -> Int { 
    return images.count 
} 

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return images[section].count 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "imageCell", for: indexPath) as! ImageCollectionViewCell 

    cell.imageView.image = images[indexPath.section][indexPath.row] 

    return cell 
} 

ответ

3

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

Пример простой источник данных:

let simpleDataSource: [[UIImage]] = [ 
    [image1, image2], 
    [image3, image4], 
    [image5, image6] 
] 

Пример использования этого в методах CollectionView:

func numberOfSections(in collectionView: UICollectionView) -> Int { 
    return simpleDataSource.count 
} 

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return simpleDataSource[section].count 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "imageCell", for: indexPath) as! ImageCollectionViewCell 
    cell.imageView.image = simpleDataSource[indexPath.section][indexPath.row] 
    return cell 
} 

Вы также должны прочитать documentation for UICollectionView.

+0

Спасибо за ваш ответ! Я обязательно прочитаю документы снова. Я пробовал ваш код и обновляет все просмотры разделов с помощью первого набора данных, поэтому, ссылаясь на ваш примерный код, все образы изображений разделов будут image1 и image2. Есть ли у вас какие-либо идеи, что может быть причиной этого? – m1234

+0

Обновлено, чтобы добавить отсутствующий метод 'numberOfSections', но если вы используете это, и одно и то же изображение находится в каждом разделе, вы не ссылаетесь на мой пример кода ... – garrettmurray

+0

Спасибо @garrettmurray, что бит кода, который вы добавили, эффект. Однако теперь все разделы содержат все данные из массива. Таким образом, каждый раздел имеет: image1, image2, image3, image4, image5, image6. Я прочитал документы по просмотрам коллекции раньше, но ваш ответ действительно помогает мне лучше понять их, поэтому спасибо! – m1234

0

Настройка массив, который содержит все изображения, или еще лучше структуры, призванные организовать вашу информацию лучше, или имена изображений, как в моем примере, а затем использовать numberOfSections и indexPath.section свойства присвоить эти изображения:

let images = [ 
    ["imageA1", "imageA2"], 
    ["imageB1", "imageB2"] 
] 

override func numberOfSections(in collectionView: UICollectionView) -> Int { 
    return images[section] 
} 

override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return images[section].count 
} 

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "imageCell", for: indexPath) as! ImageCollectionViewCell 

    cell.imageView.image = UIImage(named: images[indexPath.section][indexPath.row]) 

    return cell 
} 
Смежные вопросы