【发布时间】:2018-02-13 02:33:22
【问题描述】:
我做了一个视图控制器来显示一个图像,图像将在用户按下checkOutVC 中的右键项目后显示,就像这样
图片应该像这样出现在ReusableImageDisplayVC中
我将图像从checkOutVC 发送到ReusableImageDisplayVC,我用于这些视图控制器的代码如下:
class CheckoutTVC: UITableViewController {
@IBAction func openImageBarButtonDidPressed(_ sender: Any) {
var displayedImage = UIImage()
let imagePath = "https://***.jpg"
let urlImage = URL(string: imagePath)
NetworkingService.fetchData(url: urlImage!) { (result) in
self.activityIndicator.startAnimating()
switch result {
case .failure(let error) :
self.activityIndicator.stopAnimating()
self.showAlert(alertTitle: "Sorry", alertMessage: error.localizedDescription, actionTitle: "Back")
case .success (let imageData):
self.activityIndicator.stopAnimating()
displayedImage = UIImage(data: imageData)!
}
}
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let popup = storyboard.instantiateViewController(withIdentifier: "imageDisplay") as! ReusableImageDisplayVC
popup.photo = displayedImage
present(popup, animated: true, completion: nil)
}
}
ReusableImageDisplayVC 中的代码如下
class ReusableImageDisplayVC: UIViewController {
@IBOutlet weak var ImagePhoto: UIImageView!
var photo : UIImage?
override func viewDidLoad() {
super.viewDidLoad()
if photo == nil {
print("photo is nil")
} else {
print("photo is not nil")
}
print(photo!)
ImagePhoto.image = photo!
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ReusableImageDisplayVC.tapFunction(sender:)))
tapGesture.numberOfTapsRequired = 1
ImagePhoto.addGestureRecognizer(tapGesture)
view.addGestureRecognizer(tapGesture)
}
@objc func tapFunction(sender: UITapGestureRecognizer) {
dismiss(animated: true, completion: nil)
}
}
正如我们在ReusableImageDisplayVC 中看到的那样,我正在尝试确保以前 VC 中的 UIImage 可用,并在调试区域中打印出来
照片不是零, UIImage: 0x6040008bde20, {0, 0}
我也分配给了ImageViewImagePhoto.image = photo!
但是为什么当我运行应用程序时,它没有出现?
但是如果我像下面的代码那样直接在 ReusableImageDisplayVC 中硬编码下载图像的过程,图像就会出现
class ReusableImageDisplayVC: UIViewController {
@IBOutlet weak var ImagePhoto: UIImageView!
var photo : UIImage?
var something : String?
override func viewDidLoad() {
super.viewDidLoad()
let imagePath = "https://***.jpg"
let urlImage = URL(string: imagePath)
NetworkingService.fetchData(url: urlImage!) { (result) in
switch result {
case .failure(let error) :
self.showAlert(alertTitle: "Sorry", alertMessage: error.localizedDescription, actionTitle: "Back")
case .success (let imageData):
self.ImagePhoto.image = UIImage(data: imageData)!
}
}
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ReusableImageDisplayVC.tapFunction(sender:)))
tapGesture.numberOfTapsRequired = 1
ImagePhoto.addGestureRecognizer(tapGesture)
view.addGestureRecognizer(tapGesture)
}
@objc func tapFunction(sender: UITapGestureRecognizer) {
dismiss(animated: true, completion: nil)
}
}
这里出了什么问题?
【问题讨论】: