如何为集合视图单元格使用图像选择器
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 数组中,如果您选择相同的单元格,则图像只会重写自己,新单元格将添加新的图像到数组。
【讨论】:
以上是关于如何为集合视图单元格使用图像选择器的主要内容,如果未能解决你的问题,请参考以下文章
如何为选择多行时使用的 UITableViewCell 图像蒙皮?
在 FirstVC 中选择单元格后,如何为 SecondVC 中的每个单元格调用按钮操作?