类实例出现问题

时间:2019-04-21 00:28:28

标签: ios swift

我的目的是在 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)
    }

1 个答案:

答案 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
  }
}