У меня есть просмотр коллекции с пользовательскими ячейками. Я хочу заполнить ячейки изображениями, извлекая данные из двух мест. Один из них - это массив изображений по умолчанию, а другой - массив, который извлекается после анализа xml web services
. Таким образом, итоговый подсчет массива представляет собой суммирование подсчета массива по умолчанию и количества массивов веб-сервисов.
Как получить изображения в методе коллекции cellForItemAt
? Может ли кто-нибудь помочь мне в этом отношении?
Сверху Вопрос
let cell:SubCategoryCollectionViewCell = self.collectionview3.dequeueReusableCell(withReuseIdentifier: "Cell2", for: indexPath) as! SubCategoryCollectionViewCell
if defaultAnimalArray.count-1 >= indexPath.row{ // ex: 0...7
let item = defaultAnimalArray[indexPath.row]
cell.subThumbImg?.image = UIImage(named: item as! String)
}else{
//If now defaultAnimalArray.count = 8, indexPath = 8 , But array = 0...4, then,
let item = arrayFromAPI[indexPath.row-defaultAnimalArray.count] // 8-8 = 0
cell.subThumbImg?.image = UIImage(named: item as! String)
}
return cell
Альтернатива 1: -
Объявить defaultArray
как var
.
До return defautlArray.count+arrayFromAPI.count
объединяет массив изображений. ie, defaultArray = defaultArray+arrayFromAPI
а возвращаемая переменная становится return defaultArray.count
а также без изменений cellForItemAtIndexPath
.
Альтернатива 2:
defaultArray
как var
и не создавайте arrayFromAPI
. Просто добавьте новые изображения в defaultArray
в XML Parsing
. После добавления нового образа reload
UICollectionView
а также возвращаемую переменную станет return defaultArray.count
Альтернатива 3:
С тем же кодом item
на cellForItemAtIndexPath
становится,
let item = defaultAnimalArray+arrayFromAPI[indexPath.row]
задавать
collectionView.delegate = nil
collectionView.dataSource = nil
Пока вы не получите все изображения из xml web services
. Когда вы получите все свои данные, обновите свой массив dataSource
как вы сказали
count = default array count + array count from web services
а затем установите delegate
и dataSource
коллекцииView. Затем в
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell : UICollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "identifierCell", for: indexPath) as! UICollectionViewCell
/// Show Image Code here
let url : String = dataSource[indexPath.row]
if let _image = UIImage(named: url){
// This If Will Load the image if it save locally
} else {
// Image does not save locally, download image from URL
}
return cell
}
Я обновляю свой ответ, пожалуйста, посмотри и скажи мне, если ты найдешь что-нибудь трудное. Одна вещь, которую вы можете использовать стороннему пользователю SDWebImage для загрузки изображения из URL.