我正在尝试在 Eureka 中创建一个显示图像的自定义单元格。当点击图像时,图像会全屏显示,背景为黑色。
通常你用 view.addSubview(newImageView) 来做,但 Eureka cell 似乎没有 View 类。
这是我迄今为止得到的单元格信息:
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,结果是这样的:
View 的屏幕截图
最佳答案
如果您想全屏显示图像,则单元格的 contentView
或保存此单元格的 viewController
subview 不适合添加此图像
作为 subview
。
对此的正确解决方案是在容器 ViewController
中使用 onCellSelection
(如下所示)回调并呈现一个新的 ViewController
仅显示全屏图像或任何您想要的自定义。
imageCell.onCellSelection({[weak self] (cell, row) in
let imageVC = DisplayViewController()
imageVC.image = cell.viewImage.image
self?.present(imageVC, animated: true, completion: nil)
})
如果您只想在用户点击单元格中的图像时显示全屏,那么您应该在容器 ViewController
中获取 tapGesture
callback
并显示如上图。
关于ios - Swift Eureka 自定义单元格图片全屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50777389/