gpt4 book ai didi

ios - 使用 Storyboard 设置标签文本时出现短暂滞后

转载 作者:行者123 更新时间:2023-11-28 11:11:01 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个包含一些内容的 mainViewController。在某些时候,我从 Storyboard 中加载了一个覆盖 View Controller 。 overlay view controller 比屏幕小,显示在 mainViewController 之上。我按以下方式初始化它:

class MyOverlayViewController {
@IBOutlet var textLabel: UILabel!
@IBOutlet var countLabel: UILabel!

static let storyboard = UIStoryboard(name: "...", bundle: nil)

// Return a new view controller
class func newViewControllerWithData(data: AnyObject) -> UIViewController {
let vc = storyboard.instantiateViewControllerWithIdentifier("MyOverlayViewController") as! MyOverlayViewController

Timing.performAfterDelay(0) {
vc.titleLabel.text = data[...] // Load title label text
vc.countLabel.text = data[...] // Load count label text
}

return vc
}
}

我无法在 newViewControllerWithData 方法中立即设置标签文本,因为这会产生以下错误: fatal error :在展开可选值时意外发现 nil。因此,在该方法中立即访问标签时,标签为 nil

当 View Controller 从 Storyboard 中实例化时,两个标签 socket 似乎没有立即加载,因为这需要(非常)短的时间。

因此,我使用我的方法 Timing.performAfterDelay(0) 在下一个运行循环周期后执行代码(它启动一个持续时间为 0 的计时器并执行代码作为回调)。代码(我已经检查过)在主线程上执行。

问题如下:
有时(不总是,而且不可重现!),在加载覆盖 View Controller 时,标签在显示文本之前有几分之一秒是空的(就像我在 Storyboard 中定义的那样) .因此,在将实际数据加载到标签中之前,用户会在短时间内看到空标签。

我该如何解决这个问题?
是否可以在不使用 Timing.performAfterDelay(0) 的情况下从 Storyboard 中实例化 View Controller 后立即访问 socket ?

帮助将不胜感激。

最佳答案

Outlets View 加载后设置,即当 viewDidLoad 在 View Controller 上被调用时。但是,像 vc.viewDidLoad() 那样直接调用它是行不通的,您必须像 let dummyVariable = vc.view 那样访问 View Controller 的 View 。下面是强制加载 View 然后设置标签值的代码。

class func newViewControllerWithData(data: AnyObject) -> UIViewController {
let vc = storyboard.instantiateViewControllerWithIdentifier("MyOverlayViewController") as! MyOverlayViewController
let _ = vc.view // force load the view
// now set your outlets as you please
vc.titleLabel.text = data[...] // Load title label text
vc.countLabel.text = data[...] // Load count label text
return vc
}

注意:但这并不是一个好的做法。 MyOverlayViewController 应该负责设置其标签值,而不是从外部设置这些值。您可以通过属性或方法参数等将所需数据传递给它。

关于ios - 使用 Storyboard 设置标签文本时出现短暂滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35071917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com