我正在尝试在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,结果如下:
视图的屏幕截图
如果你想在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
并显示如上图像。
感谢Kamran,我想我找到了解决方案。
对于Eureka行,您始终可以使用row.onCellSelection回调。
在我的情况下,我可以在调用自定义行时执行此操作:
callback
然后创建一个这样的showMe函数:
ViewController
现在你应该能够以Kamran的代码呈现全屏图像。