Как найти имя изображения из CollectionView? - PullRequest
0 голосов
/ 28 ноября 2018

Когда я выбираю изображение из CollectionView и этой ячейки, я хочу получить имя этого изображения и сохранить его в CloudKit.Мой главный вопрос, как получить имя выбранного изображения?

Это мой CollectionViewCell:

class AddImageViewCell: UICollectionViewCell {
    @IBOutlet weak var addListImageView: UIImageView!

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        self.layer.cornerRadius = self.frame.size.width * 0.2
        self.layer.borderWidth = 2
        self.layer.borderColor = UIColor.clear.cgColor
    }
}

Некоторые из моих AddListViewController:

class AddListViewController: UIViewController {
    var imageArray : [UIImage] = [UIImage(named: "Images/do001.png")!,
                                  UIImage(named: "Images/do002.png")!,
                                  UIImage(named: "Images/do003.png")!,
                                  UIImage(named: "Images/do004.png")!,
                                  UIImage(named: "Images/do005.png")!,
                                  UIImage(named: "Images/do006.png")!,
                                  UIImage(named: "Images/do007.png")!,
                                  UIImage(named: "Images/do008.png")!,
                                  UIImage(named: "Images/do009.png")!,
                                  UIImage(named: "Images/do010.png")!,
                                  UIImage(named: "Images/do011.png")!,
                                  UIImage(named: "Images/do012.png")!,
                                  UIImage(named: "Images/do013.png")!,
                                  UIImage(named: "Images/do014.png")!,
                                  UIImage(named: "Images/do015.png")!,
                                  UIImage(named: "Images/do016.png")!]

    let selectedImage = 0

И здесьЯ хочу получить имя файла изображения:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let cell = addImageCollectionView.cellForItem(at: indexPath) as! AddImageViewCell
    cell.layer.borderColor = UIColor.white.cgColor

    var imageInCell = cell.addListImageView.image

    print("\(String(describing: imageInCell))")
}

Здесь CellForItemAt:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell : AddImageViewCell = addImageCollectionView.dequeueReusableCell(withReuseIdentifier: "AddImageCell", for: indexPath) as! AddImageViewCell
    cell.addListImageView.image = imageArray[indexPath.item]
    return cell
}

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Не читайте значение из ячеек.Клетки используются повторно.Вместо этого используйте вашу модель.

Я бы предложил сделать:

var imageNameArray: [String] = ["Images/do001.png", "Images/do002.png", ...]

В collectionView(_:cellForItemAt:):

let imageName = imageNameArray[indexPath.item]
let image = UIImage(named: imageName)
cell.addListImageView.image = image

В collectionView(_:didSelectItemAt:):

let selectedImageName = imageNameArray[indexPath.item]
0 голосов
/ 28 ноября 2018

Вы можете использовать это расширение,

  1. , оно создает свойство name и устанавливает его значение с помощью пользовательского init,
  2. , если вы не использовали пользовательское init будет возвращено пустое String
 extension UIImage {
    convenience init?(named: String, saveName: Bool) {
        self.init(named: named)
        if saveName {
            self.name = named
        }
    }
    struct Name {
        static var name: String = ""
    }
    var name: String {
        get {
            return Name.name
        }
        set(newValue) {
            Name.name = newValue
        }
    }
}

Использование:

let img = UIImage(named: "test.png", saveName: true)

img?.name // "test.png"

// With image view
let imageView = UIImageView(image: img)
imageView.image?.name
...