【发布时间】:2019-07-04 05:19:03
【问题描述】:
我让用户在登录时选择背景图像。根据用户选择的图像选择,我想用用户选择的图像显示另一个视图控制器。我遵循 youtube 上的一些示例,但我收到“致命错误:在隐式展开可选值时意外发现 nil”并且图像未设置。
protocol SelectionImageDelegate {
func setBackgroundImage(selectedImage: UIImage)
}
class SelectBackgroundViewController: UIViewController {
// MARK: IBOutlets
@IBOutlet weak var snowBackgroundImage: UIImageView!
@IBOutlet weak var desertBackgroundImage: UIImageView!
@IBOutlet weak var pathwayBackgroundImage: UIImageView!
@IBOutlet weak var beachBackgroundImage: UIImageView!
// MARK: Properties
var imageSelectionDelegate: SelectionImageDelegate!
// MARK: Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
self.imageSelectionDelegate = FootprintViewController()
setButtonCorners()
}
override func viewWillAppear(_ animated: Bool) {
snowBackgroundImage.center.x -= view.bounds.width
desertBackgroundImage.center.x -= view.bounds.width
pathwayBackgroundImage.center.x -= view.bounds.width
beachBackgroundImage.center.x -= view.bounds.width
}
@IBAction func didTappedSnowBackground(_ sender: Any) {
print("tapped snow")
imageSelectionDelegate.setBackgroundImage(selectedImage: UIImage(named: "Snow_Background")!)
print("set image")
let vc = (self.storyboard?.instantiateViewController(withIdentifier: "FootprintVC"))!
self.presentViewController(vc)
}
@IBAction func didTappedDesertBackground(_ sender: Any) {
imageSelectionDelegate.setBackgroundImage(selectedImage: UIImage(named: "Desert_Background")!)
let vc = (self.storyboard?.instantiateViewController(withIdentifier: "FootprintVC"))!
self.presentViewController(vc)
}
@IBAction func didTappedPathwayBackground(_ sender: Any) {
imageSelectionDelegate.setBackgroundImage(selectedImage: UIImage(named: "Pathway_Background")!)
let vc = (self.storyboard?.instantiateViewController(withIdentifier: "FootprintVC"))!
self.presentViewController(vc)
}
@IBAction func didTappedBeachBackground(_ sender: Any) {
imageSelectionDelegate.setBackgroundImage(selectedImage: UIImage(named: "Beach_Background")!)
let vc = (self.storyboard?.instantiateViewController(withIdentifier: "FootprintVC"))!
self.presentViewController(vc)
}
}
class FootprintViewController: UIViewController {
// MARK: IBOutlets
@IBOutlet weak var backgroundImageView: UIImageView!
@IBOutlet weak var emptyFootprintImageView: UIImageView!
// MARK: Life Cycles
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension FootprintViewController: SelectionImageDelegate {
func setBackgroundImage(selectedImage: UIImage) {
backgroundImageView.image = selectedImage
}
}
class FootprintViewController: UIViewController {
// MARK: IBOutlets
@IBOutlet weak var backgroundImageView: UIImageView!
@IBOutlet weak var emptyFootprintImageView: UIImageView!
// MARK: Life Cycles
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension FootprintViewController: SelectionImageDelegate {
func setBackgroundImage(selectedImage: UIImage) {
backgroundImageView.image = selectedImage
}
}
【问题讨论】:
-
您究竟从哪里得到异常?
-
异常出现在imageSelectionDelegate.setBackgroundImage(selectedImage: UIImage(named: "Snow_Background")!, color: .red)
标签: swift uiimageview delegates uiimage protocols