如何为集合视图单元格使用图像选择器

Posted

技术标签:

【中文标题】如何为集合视图单元格使用图像选择器【英文标题】:How to use Image Picker for Collection View Cells 【发布时间】:2016-09-02 10:53:08 【问题描述】:

我目前正在制作一个要求用户使用图像选择器将图像加载到CollectionViewCell 的应用程序。我正在使用一个具有 UIImageView 的原型单元格,但是每当我发布照片时,它只会进入第一个单元格,而不是我按下的单个单元格。我想知道如何以一种针对我点击的特定单元格的方式编写代码并相应地使用图像选择器。

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    return self.items.count

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 

    // get a reference to our storyboard cell
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! MyCollectionViewCell

    cell.myLabel.text = self.items[indexPath.item]
    cell.tag = self.integer[indexPath.item]

    cell.backgroundColor = UIColor.yellowColor()

    cell.myAdd.addTarget(self, action: "importPicture:", forControlEvents: UIControlEvents.TouchUpInside)


    return cell


func importPicture(sender: UIButton) 
    imagePicker.delegate = self
    imagePicker.sourceType = .PhotoLibrary
    imagePicker.allowsEditing = true
    presentViewController(imagePicker, animated: true, completion: nil)


func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) 
    let
    cell = myCollection.cellForItemAtIndexPath(NSIndexPath(forRow: 0, inSection: 0)) as! MyCollectionViewCell
    var newImage: UIImage

    imagePicker.dismissViewControllerAnimated(true, completion: nil)
    let pickedImage1 = info[UIImagePickerControllerEditedImage] as? UIImage
        currentPickerTarget.image = pickedImage1
        currentPickerTarget = cell.myImages


    myCollection.reloadData()



// MARK: - UICollectionViewDelegate protocol

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 
    // handle tap events
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! MyCollectionViewCell
    print("You selected cell #\(indexPath.item)!")
    print("\(indexPath.row)")
    cell.backgroundColor = UIColor.blueColor()


func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int 
    // 1
    // Return the number of sections
    return 1


override func viewDidLoad() 
    super.viewDidLoad()

    let longPressGesture = UILongPressGestureRecognizer(target: self, action: "handleLongGesture:")
    self.myCollection.addGestureRecognizer(longPressGesture)

【问题讨论】:

什么时候更新 currentPickerTarget ?总体思路:将选定的 indexPath 保存在 didSelectItemAtIndexPath 中的变量中,并在拾取图像后使用正确的图像重新加载项目。 【参考方案1】:

发生这种情况是因为您正在重写拾取的图像并将其添加到数组的索引 0,我将删除行 cell.myAdd.addTarget(self, action: "importPicture:", forControlEvents: UIControlEvents.TouchUpInside) 并仅修改函数 func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 以保存您选择的单元格的 indexpath.row早点,然后执行函数 importPicture ,当用户完成选择他的图片时,您将其保存到您之前保存的索引的 images 数组中,如果您选择相同的单元格,则图像只会重写自己,新单元格将添加新的图像到数组。

【讨论】:

以上是关于如何为集合视图单元格使用图像选择器的主要内容,如果未能解决你的问题,请参考以下文章

如何为 uicollectionview 制作“选择环”?

如何在 iOS 的表格单元格中显示日期选择器和选择器视图?

如何为选择多行时使用的 UITableViewCell 图像蒙皮?

在 FirstVC 中选择单元格后,如何为 SecondVC 中的每个单元格调用按钮操作?

自定义表格视图单元格中的 UITextField。点击单元格/文本字段时显示选择器视图

[UICollectionViewCell imageView]:无法识别的选择器发送到实例