Swift标签不会更新

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

我有一个View Controller,它将另一个vc显示为弹出窗口。当我在此弹出窗口上单击某项时,将关闭显示的vc,执行委托方法,并应更改原始vc上的标签文本。我的代码:

    func languageDidChange() {
    //Force view to load, so that languageLabel is not nil
    self.loadViewIfNeeded()
    languageLabel.text = "Scan-Language: " + LanguageTVC.language
}

这是我的委托方法,已执行。标签文本也会更改,但是此更改不会显示在视图控制器上。 (我必须调用loadViewIfNeeded,因为如果不这样做,我的标签将为nil。)

我在其中调用委托方法的didSelectRow方法:

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    LanguageTVC.selectedLanguageShort = languages[indexPath.row].shortName
    delegate!.languageDidChange()
    self.dismiss(animated: true, completion: nil)
}

如何显示标题更改?

swift uikit uilabel
1个回答
0
投票

一些尝试。这是根据提供的有限信息得出的答案,但应该足以使您继续前进。

override func viewWillAppear(...)方法内部重新加载tableView。确保在主线程上重新加载。 DispatchQueue.main.async将确保这一点。如果您的应用程序内部出现紫色标签,那是因为您正在运行的线程。

DispatchQueue.main.async {
    self.tableView.reloadData()
}

您的委托需要在触发函数时再次调用它,请确保您正在主线程上执行它。

func myProtocolRequiredFunction()
{
      languageDidChange()
}

当然,在更新标签时要确保用DispatchQueue.main.async { }包裹起来>

    func languageDidChange() {
    //Force view to load, so that languageLabel is not nil
    self.loadViewIfNeeded()

    DispatchQueue.main.async {
          languageLabel.text = "Scan-Language: " + LanguageTVC.language
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.