ImagePicker 选择图像后,CollectionView 图像不更新
Posted
技术标签:
【中文标题】ImagePicker 选择图像后,CollectionView 图像不更新【英文标题】:CollectionView image does not update after ImagePicker picks an image 【发布时间】:2017-05-27 08:07:20 【问题描述】:我有一个 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])
这里是委托函数:
weak var delegate: LoginControllerDelegate?
func updateCollectionView(image: UIImage)
delegate?.updateCollectionView(image: image)
这里是将委托和 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 LoginControllerDelegate: class
func updateCollectionView(image: UIImage)
【问题讨论】:
你是在挑选图片后重新加载数据吗? 我试过了,没用 如何更新单元格中的imageView
?你在这里所做的就是更新logoImageView
更新imageView
是什么意思?我更新了 UICollectionView,但没有做任何事情,所以我删除了它。您如何专门更新imageView
?
@chillin' 你能否展示一下 collectionView 方法,让我们了解问题所在
【参考方案1】:
将此代码添加到方法的末尾。
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
并重新加载项目。
【讨论】:
我应该用什么替换 yourIndexPath?indexPath
要更新的单元格。你在用collectionView(_:didSelectItemAt:)吗?
不,我没有使用它。我可以改用collectionView.reloadData()
吗?
是的,您可以这样做,但您需要更新您的数据模型,以便 cellForItem
使用正确的图像
让我们continue this discussion in chat.以上是关于ImagePicker 选择图像后,CollectionView 图像不更新的主要内容,如果未能解决你的问题,请参考以下文章
Flutter Resize ImagePicker Image 在上传到firebase之前
无法使用模拟器从 iOS 中的 ImagePicker 获取图像路径和图像?
如何使用 Swift/SwiftUI 从 ImagePicker 获取选定的图像文件名