我有一个包含图像的 collectionView 单元格。当用户点击图像时,将调出图像选择器。但是,选择图像时,collectionView 中的图像不会更新。我在常规 UIViewController 中使用了完全相同的代码并且它起作用了,所以我假设这是因为这是在 UICollectionViewController 中。
这是应该更新图像的代码:
func updateCollectionView(image: UIImage) {
let indexPath = IndexPath(item: 3, section: 0)
if let LoginCell = collectionView.cellForItem(at: indexPath) as? LoginCell {
LoginCell.logoImageView.image = image
}
collectionView.reloadItems(at: [indexPath])
}
这是委托(delegate)函数:
weak var delegate: LoginControllerDelegate?
func updateCollectionView(image: UIImage) {
delegate?.updateCollectionView(image: image)
}
这是将委托(delegate)和 updateCollectionView 函数联系在一起的选择器函数:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
print(info)
picker.delegate = self
var selectedImageFromPicker: UIImage?
if let editedImage = info["UIImagePickerControllerEditedImage"] {
selectedImageFromPicker = editedImage as? UIImage
} else if let originalImage = info["UIImagePickerControllerOriginalImage"] {
selectedImageFromPicker = originalImage as? UIImage
}
if let selectedImage = selectedImageFromPicker {
updateCollectionView(image: selectedImageFromPicker!)
}
}
这是 collectionView 方法,LoginCell 是我尝试调出选择器的地方:
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int{
return pages.count + 1
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if indexPath.item == pages.count{
let loginCell = collectionView.dequeueReusableCell(withReuseIdentifier: loginCellId, for: indexPath) as! LoginCell
loginCell.delegate = self
return loginCell
}
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! PageCell
let page = pages[indexPath.item]
cell.page = page
return cell
}
这是我在协议(protocol)中创建的委托(delegate)方法:
协议(protocol) LoginControllerDelegate: class {
func updateCollectionView(图片: UIImage)
最佳答案
在您的方法末尾添加此代码。
if let selectedImage = selectedImageFromPicker, let yourCell = collectionView.cellForItem(at: IndexPath(item: 3, section: 0)) as? CustomCell {
yourCell.logoImageView.image = selectedImage
collectionView.reloadItems(at: [IndexPath(item: 3, section: 0)])
}
这将获取您的单元格的引用,更新其 logoImageView
并重新加载该项目。
关于ios - ImagePicker 选取图像后 CollectionView 图像不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44214500/