在viewController init中调用时按钮文本不变

问题描述 投票:0回答:2

我正在尝试基于在viewController初始化中设置的值来更改UIButton的文本。

所以这是初始化:

init(viewModel: ViewModel, stateMachine: StateMachine) {
    self.viewModel = viewModel
    self.stateMachine = stateMachine
    super.init(nibName: nil, bundle: nil) 
    title = "TEST"
    setInitialButtonText()
}

按钮设置方法:

private func setInitialButtonText() {
    if viewModel.order.measurement.total != nil {
            button.title = "Review"
        } else {
            button.title = "Check"
        }
    }

必需值已加载到viewModel中。

现在,当我在此init中调用此button方法时,它无效。但是,当我在viewDidLoad中调用它时,它可以工作。

该按钮的初始化方法如下:

lazy var button: UIButton = {
    let button = UIButton(title: "Test", color: UIColor.green)
    button.alpha = 1
    return button
}()

当我将方法放入init时,默认的'Test'初始化值显示在按钮上。但是,当我同时从init和viewDidLoad中打印按钮标题时,首先调用viewDidLoad一个并显示“ Test”,然后调用init一个并显示正确的值。如果在viewDidLoad之后调用它,为什么它不反映在UI上?

当我将方法插入viewDidLoad时,显示正确的值...

肯定我在这里缺少明显的东西,但是任何帮助将不胜感激。

更新:我也从viewDidDisappear打印,即使从init调用方法,也正确的值正在打印。因此正在设置属性,但未在按钮上显示...

swift uibutton initialization viewdidload
2个回答
0
投票

不确定是否是问题所在。但是您是否尝试过使用button.setTitle("myTitle", for: .normal)设置按钮的标题?


0
投票

上面的代码都没有显示您实际上在视图控制器的视图中添加了按钮-看不到它很难说,但是您有可能also在xib中创建并添加按钮,并分配它到button属性?这将替换您在延迟加载中创建的按钮。

或者,您是否正在创建一个完全独立的按钮,但从未更新?

button如何添加到视图控制器的视图?

© www.soinside.com 2019 - 2024. All rights reserved.