我的目的是在 ViewController 2 中按下按钮时,屏幕将关闭,我将使用UIColor / UIImage填充我的代表,对吗?好的,在关闭视图后, ViewController 1 会将背景色设置为红色。但是,尝试在 ViewController 1 中实例化“ Escolha VC”时遇到了麻烦。我将在以上两个课程中发布:
ViewController 1
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var labelNome: UILabel!
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func BotaoStart(_ sender: Any) {
let selectionVC = EscolhaVC()
selectionVC.selectionDelegate = self //I got no crashes,
//but the problem is that a black screen comes in instead "EscolhaVC"
present(selectionVC, animated: true, completion: nil)
}
}
extension ViewController:DidselectInformationDelegate {
func selectedOptions(imagem: UIImage, cor: UIColor) {
self.imageView.image = imagem
self.view.backgroundColor = cor
}
我在做什么错了?
ViewController 2
import UIKit
protocol DidselectInformationDelegate {
func selectedOptions(imagem:UIImage, cor:UIColor)
}
class EscolhaVC: UIViewController {
var selectionDelegate:DidselectInformationDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func botaoLadoBom(_ sender: Any) {
selectionDelegate?.selectedOptions(imagem: #imageLiteral(resourceName: "ladoBom"), cor: .green)
dismiss(animated: true, completion: nil)
}
@IBAction func botaoLadoNegro(_ sender: Any) {
selectionDelegate?.selectedOptions(imagem: #imageLiteral(resourceName: "ladoNegro"), cor: .red)
dismiss(animated: true, completion: nil)
}
答案 0 :(得分:0)
好吧,初始化是Swift中一个非常广泛的主题。请查看this documentation,以获取有关该主题的完整说明。但是作为一个简短的摘要,您只需要调用任何类型的init
(类或结构)中需要的任何参数。例如,请考虑以下类:
class Foo {
let a: Int
let b: Int
init() {
a = 0
b = 0
}
init(a: Int, b: Int) {
self.a = a
self.b = b
}
}
您有两种实例化Foo
对象的方法。由let foo = Foo()
或类似let foo = Foo(a: 10, b: 20)
之类的东西。它是否是某个其他类的子类(如UIViewController
子类)并不重要。它是否包含类型为协议的属性都无关紧要。除非您的UIViewController
子类定义了自定义初始化程序,否则您可以通过以下简单方式实例化它:
let selectionVC = EscolhaVC()
然后再设置其他必要属性:
selectionVC.selectionDelegate = self
对于任何类型,这都是非常简单的。问题是类型中的每个属性都必须在实例化时初始化。这意味着必须设置非可选类型的值。这基本上就是我链接的文档的内容。
编辑
根据您的编辑,这与实例化无关,而与样式EscolhaVC
有关。当从情节提要实例化时,您将获得一个视图控制器,其中包含您在界面构建器中定义的所有视图,颜色等。但是,如果要通过其初始化程序实例化视图控制器,则需要自己进行操作。例如,尝试将EscolhaVC
的视图背景颜色设置为其他颜色,您会发现一切都很好:
class EscolhaVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .red
}
}