【问题标题】:I don't know to initialize my variable in the required init?(coder) method of my UIView subclass我不知道在我的 UIView 子类的所需 init?(coder) 方法中初始化我的变量
【发布时间】:2019-09-01 18:51:54
【问题描述】:

我想初始化 UIView 子类的 Presenter 属性,我在我的 init 方法中执行此操作,但在所需的 init 中出现错误“Property 'self.presenter' not initialized at super.init call”?(编码器)方法。

我不知道如何初始化它,因为我无法向所需的 init?(coder) 方法添加参数。

class HorizontalBarChart: UIView {
    private var presenter: HorizontalBarChartPresenter

    init(barHeight: CGFloat, spaceBetweenBars: CGFloat) {
        self.presenter = HorizontalBarChartPresenter(barHeight: barHeight, spaceBetweenBars: spaceBetweenBars)
        super.init(frame: CGRect.zero)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}

【问题讨论】:

标签: swift uiview initialization subclass


【解决方案1】:

如果您的 UI 是在 Storyboard 或 Nib 文件中定义的,那么定义便利初始化器或覆盖现有初始化器不是解决方案。在这种情况下,您创建了一个将在“viewDidLoad”中调用的“配置”方法。

class HorizontalBarChart: UIView {

    private var presenter: HorizontalBarChartPresenter

    func configure(barHeight: CGFloat, spaceBetweenBars: CGFloat) {
        self.presenter = HorizontalBarChartPresenter(barHeight: barHeight, spaceBetweenBars: spaceBetweenBars)
    }
}

class CustomViewController: UIViewController {

    @IBOutlet weak var horizontalBarChart: HorizontalBarChart

    override func viewDidLoad() {
        super.viewDidLoad()
        horizontalBarChart.configure(barHeight: 100, spaceBetweenBars: 10)
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2015-05-16
    相关资源
    最近更新 更多