swift - 标签文本在功能中被多次更改,但未在屏幕上更新

标签 swift

在我的应用中,我需要使用标签显示文本。用户提供一个值,用于确定每次文本更改之间的延迟。每次标签更新时,它的文本都会成为我数组中的下一个项目。但是,当它在应用程序中使用时,标签会在几秒钟后变为数组中的最后一项(延迟时间乘以数组中的项数)。我也打印了该项目,但在几秒钟后一次打印了所有项目(延迟时间乘以数组中的项目数量)。那么,有没有办法让标签在每次更改后更新,而不是在最后更改?

导致问题的代码:

    @IBAction func startEndTouch(sender: AnyObject) {

    var wordsPerMinVal:Double = 60.0/sliderValueBen

    for item in textEnterGo {
        delay(wordsPerMinVal){
            self.yourWordsLabel.text = item
            print(item)   
        }
    }
}

最佳答案

您需要了解事件循环用于更新 UI 的方式,以及您的代码如何插入循环。

当您的代码获得控制权时,屏幕渲染将停止,让您的代码进行任何需要进行的更新。一旦您的代码返回,Cocoa 就会分析您的方法中所做的更改,并相应地更新视觉效果。

这提供了解决您的问题的关键:在您的方法结束之前,包括 for 循环,Cocoa 无法看到任何更改。这就是为什么您只能看到最后一次更新,而不会注意到中间更新的原因。

为了解决这个问题,您需要重新考虑方法:创建一个将其状态保存在成员变量中的方法,而不是使用循环。从事件处理程序调用该方法,设置第一次显示的状态,显示第一项,设置定时器以在 wordsPerMinVal 中唤醒您,然后返回。这将使事件循环呈现您的更改。当计时器叫你回来时,改变视觉效果,根据需要重新设置计时器,然后再次返回。继续,直到完成更新。

关于swift - 标签文本在功能中被多次更改,但未在屏幕上更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36391365/

相关文章:

ios - 如何使用 swift 中的自定义按钮选择表格 View 中的所有单元格?

ios - UITableViewCell 崩溃

swift - 'Use of self in method call before super.init initializes self',无法通过方法调用初始化属性

swift - 代码在 Playground 上运行良好;同时它产生一个 EXC_I386_GPFLT 错误

iOS - 设置 ImageView 背景颜色和蒙版

ios - 如何根据用户选择在 CollectionView 标题下方显示不同的单元格?

ios - 如何在 swift3 中从 Any 获取字符串

ios - 不能使用实例成员

ios - swift - "use of unresolved identifier"

ios - 未针对iOS 13( objective-c )调用didRegisterForRemoteNotificationsWithDeviceToken