Swift Eureka自定义细胞图像全屏

问题描述 投票:0回答:2

我正在尝试在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)


}



}

在尝试添加子视图时,我得到“使用未解析的标识符'视图'”。

我曾尝试使用contentView而不是view,结果如下:

视图的屏幕截图

ios swift uiimageview eureka-forms
2个回答
0
投票

如果你想在fullScreen中显示图像,单元格qazxsw poi或包含此单元格的qazxsw poi subView不是将contentView添加为viewController的正确位置。

一个正确的解决方案是在容器image中使用subview(如下所示)回调并提供一个新的onCellSelection,它显示唯一的图像全屏或任何你想要的自定义。

ViewController

如果您只想在用户在单元格中点击图像时显示全屏,那么您应该在容器ViewController中获取imageCell.onCellSelection({[weak self] (cell, row) in let imageVC = DisplayViewController() imageVC.image = cell.viewImage.image self?.present(imageVC, animated: true, completion: nil) }) tapGesture并显示如上图像。


0
投票

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

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

在我的情况下,我可以在调用自定义行时执行此操作:

callback

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

ViewController

现在你应该能够以Kamran的代码呈现全屏图像。

© www.soinside.com 2019 - 2024. All rights reserved.