首页 > 解决方案 > Swift Eureka 自定义单元格图片全屏

问题描述

我正在尝试在 Eureka 中创建一个显示图像的自定义单元格。当点击图像时,图像以黑色背景全屏显示。

通常你用 view.addSubview(newImageView) 来做,但看起来 Eureka 单元格没有视图类。

这是我到目前为止得到的细胞:

final class ImageViewCell: Cell<ImageView>, CellType {

@IBOutlet weak var viewImage: UIImageView!

//let storage = Storage.storage().reference()

required init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
}

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

override func setup() {
    super.setup()
    //cell not selectable
    selectionStyle = .none

    viewImage.contentMode = .scaleAspectFill
    viewImage.clipsToBounds = true

    height = {return 300 }

    //make userImage reconize tapping
    let tapRec = UITapGestureRecognizer(target: self, action: #selector(imageTapHandler(tapGestureRecognizer:)))
    viewImage.addGestureRecognizer(tapRec)
    viewImage.isUserInteractionEnabled = true

}

@objc func imageTapHandler(tapGestureRecognizer: UITapGestureRecognizer) {
    let imageView = tapGestureRecognizer.view as! UIImageView
    let newImageView = UIImageView(image: imageView.image)
    newImageView.frame = UIScreen.main.bounds
    newImageView.backgroundColor = .black
    newImageView.contentMode = .scaleAspectFit
    newImageView.isUserInteractionEnabled = true
    let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage))
    newImageView.addGestureRecognizer(tap)
    view.addSubview(newImageView)


}

@objc func dismissFullscreenImage(_ sender: UITapGestureRecognizer) {

    sender.view?.removeFromSuperview()
}

override func update() {
    super.update()

    // we do not want to show the default UITableViewCell's textLabel
    textLabel?.text = nil

    // get the value from our row
    guard let imageData = row.value else { return }

    // get user image data from value
    let downloadData = imageData.pictureData

    viewImage.image = UIImage(data: downloadData)


}



}

尝试 addSubview 时,我收到“使用未解析的标识符 'view'”。

我试过用contentView代替view,结果是这样的:

视图的屏幕截图

标签: iosswiftuiimagevieweureka-forms

解决方案


感谢Kamran,我想我找到了解决方案。

对于 Eureka 行,您始终可以使用 row.onCellSelection 回调。

在我的情况下,我可以在调用自定义行时这样做:

                            <<< ImageViewCellRow(){ row in
                            row.value = ImageView(pictureData: data!)
                            row.onCellSelection(showMe)
                    }

然后像这样创建一个 showMe 函数:

    func showMe(cell: ImageViewCell, row: (ImageViewCellRow)) {
            print("tapped my ImageViewCell!")
    }

现在您应该能够将全屏图像显示为 Kamran 的代码。


推荐阅读