ios - ImagePicker 选取图像后 CollectionView 图像不更新

标签 ios swift xcode uicollectionview uiimagepickercontroller

我有一个包含图像的 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/

相关文章:

ios - 苹果支付 Stripe : Using apple pay certificate not able build

ios - TableView 不会在 Storyboard中拉伸(stretch)到全屏

ios - ARImageAnchor 变换矩阵的坐标与 ARPlaneAnchor 的坐标相差太大

ios - 在重力作用下旋转物体

swift - xcode 9.1 无法跳转到定义

android - Android 和 iOS 应用程序是否可以显示完全相同的字体?

ios - 如何在Google Map,Swift中设置受限区域或受限区域

ios - 将捕获的图像添加到下一个 View Swift 3 Xcode 8

ios - 升级 react native 时如何解决 `project.pbxproj` 文件中的冲突?

ios - 在 iOS 中以编程方式连接或检测到某个 WiFi?