我有一个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)
}
如何显示标题更改?
一些尝试。这是根据提供的有限信息得出的答案,但应该足以使您继续前进。
在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
}
}