gpt4 book ai didi

swift - 如何在单元格末尾添加 CollectionView 自定义单元格?

转载 作者:搜寻专家 更新时间:2023-10-31 22:19:59 24 4
gpt4 key购买 nike

我有一组图像,显示在 Collection View 中,当我单击打开图像选择器的最后一个单元格时,我创建了一个单元格。 -> 可以在该单元格中设置所选图像,并自动添加最后一个新单元格。 (我对此一无所知,请帮忙,谢谢)

CollectionView 类

class ViewController: UIViewController,UICollectionViewDelegate,UICollectionViewDataSource,UIImagePickerControllerDelegate,UINavigationControllerDelegate
{

var imagePicker = UIImagePickerController()
let reuseIdentifier = "cell" // also enter this string as the cell identifier in the storyboard
var items = ["1", "2", "3", "4", "5"]

@IBOutlet var collectionView: UICollectionView!

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

// MARK: - UICollectionViewDataSource protocol

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

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! MyCollectionViewCell

// cell.backgroundColor = UIColor.cyanColor()
cell.btnSelectImage.setTitle(items[indexPath.row], forState: .Normal)
cell.btnSelectImage.tag = indexPath.row
cell.btnSelectImage.addTarget(self,action:#selector(buttonClicked),
forControlEvents:.TouchUpInside)
return cell

}

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)
{
if indexPath.row == 0
{
// call your alert here
}
}
func buttonClicked(sender:UIButton)
{
let alertController: UIAlertController = UIAlertController(title: "Please choose a Picture".localized, message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet)
let cameraAction = UIAlertAction(title: "Camera".localized, style: UIAlertActionStyle.Default){
UIAlertAction in
self.openCamera()
}
let gallaryAction = UIAlertAction(title: "Gallery".localized, style: UIAlertActionStyle.Default){
UIAlertAction in
self.openGallary()
}
let cancelAction = UIAlertAction(title: "Cancel".localized, style: UIAlertActionStyle.Cancel){
UIAlertAction in
}
alertController.addAction(cameraAction)
alertController.addAction(gallaryAction)
alertController.addAction(cancelAction)

if UIDevice.currentDevice().userInterfaceIdiom == .Phone{
self.presentViewController(alertController, animated: true, completion: nil)
}
}
//MARK: - UIImagepickercontroller Method -

func openCamera()
{
if UIImagePickerController.availableCaptureModesForCameraDevice(.Rear) != nil
{
imagePicker.allowsEditing = true
imagePicker.sourceType = UIImagePickerControllerSourceType.Camera
imagePicker.showsCameraControls = true
imagePicker.cameraCaptureMode = .Photo
imagePicker.takePicture()

if UIDevice.currentDevice().userInterfaceIdiom == .Phone
{
self.presentViewController(imagePicker, animated: true, completion: nil)
}
}
else
{
noCamera()
}
}

func openGallary()
{
if UIDevice.currentDevice().userInterfaceIdiom == .Phone
{
imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
self.presentViewController(imagePicker, animated: true, completion: nil)
imagePicker.allowsEditing = true
}
else
{
imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary

}
}
func noCamera()
{
let alertVC = UIAlertController(title: "ok", message: "Device has no camera".localized, preferredStyle: UIAlertControllerStyle.Alert)
let okAction = UIAlertAction(title: "OK".localized, style: UIAlertActionStyle.Default, handler: nil)
alertVC.addAction(okAction)
presentViewController(alertVC, animated: true, completion: nil)
}

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject])
{

let timestamp = Int(NSDate().timeIntervalSince1970)
let choosenImage = info[UIImagePickerControllerEditedImage] as! UIImage


var indexPath = NSIndexPath(forRow: 0, inSection: 0)
let cell = collectionView.cellForItemAtIndexPath(indexPath) as! MyCollectionViewCell

cell.btnSelectImage.setBackgroundImage(choosenImage, forState: .Normal)


collectionView.reloadData()

dismissViewControllerAnimated(true, completion: nil)

}
func imagePickerControllerDidCancel(picker: UIImagePickerController)
{
dismissViewControllerAnimated(true, completion: nil)
}

}

CollcetionViewCell

class MyCollectionViewCell: UICollectionViewCell
{

@IBOutlet var btnSelectImage: UIButton!

}

-创建图片数组,显示在collectionview中

最佳答案

请仅编辑方法并添加一些方法:

var imagePicker = UIImagePickerController()
var selectedImage : UIImage?

override func viewDidLoad() {
super.viewDidLoad()
imagePicker.delegate = self
// Do any additional setup after loading the view, typically from a nib.
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! MyCollectionViewCell

cell.btnSelectImage.setTitle(items[indexPath.row], forState: .Normal)
cell.btnSelectImage.addTarget(self,action:#selector(buttonClicked),
forControlEvents:.TouchUpInside)

cell.btnSelectImage.setBackgroundImage(selectedImage, forState: .Normal)//setBackground image of button
return cell
}


func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)
{
//because need open imagePicker only last cell
//IF YOU WANT TO OPEN IMAGEPICKER CLICK ON BUTTON THEN ADD COMMENT BELOW LINE
if indexPath.row == self.items.count-1
{
self.configuringImagePickerController()
}
}

func buttonClicked(sender:UIButton)
{
self.configuringImagePickerController()//If you want open imagepicker click on button
}

func configuringImagePickerController()
{
let alertController: UIAlertController = UIAlertController(title: "Please choose a Picture".localized, message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet)
let cameraAction = UIAlertAction(title: "Camera".localized, style: UIAlertActionStyle.Default){
UIAlertAction in
self.openCamera()
}

let gallaryAction = UIAlertAction(title: "Gallery".localized, style: UIAlertActionStyle.Default){
UIAlertAction in
self.openGallary()
}
let cancelAction = UIAlertAction(title: "Cancel".localized, style: UIAlertActionStyle.Cancel){
UIAlertAction in
}
alertController.addAction(cameraAction)
alertController.addAction(gallaryAction)
alertController.addAction(cancelAction)

self.presentViewController(alertController, animated: true, completion: nil)
}

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject])
{
selectedImage = info[UIImagePickerControllerEditedImage] as! UIImage
collectionView.reloadData()
dismissViewControllerAnimated(true, completion: nil)
}

关于swift - 如何在单元格末尾添加 CollectionView 自定义单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41340097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com