swift ios一遍又一遍地改变uilabel文本值

时间:2016-11-23 19:28:13

标签: ios swift xcode

我有两个变量:

var textOne: String = "Some text"
var textTwo: String = "Some other text"

现在我想将这些值分配给UILabel,所以我一遍又一遍地遍历它们。

EG。对于5秒MyLabel.text = textOne,它变为MyLabel.text = textTwo然后重新开始,因此标签中的文字每5秒更改一次。

现在我已为两个功能设置了两个计时器。

5秒后,此功能将运行:

showTextOne() {
MyLabel.text = textOne
}

10秒后,此功能将运行:

showTextTwo() {
  MyLabel.text = textTwo
}

但是这只会改变标签两次,我希望只要显示当前的VC,它就会在两个值之间保持变化。

那么还有其他方法可以在两个值之间更改UILabel.text吗?

3 个答案:

答案 0 :(得分:4)

你需要一个变量来跟踪当前文本是什么,然后一个5秒计时器在两个选项之间切换,这可以在Swift 3中非常简单地编写。

var isTextOne = true

let timer = Timer.scheduledTimer(withTimeInterval: 5, repeats: true) {
    myLabel.text = isTextOne ? textTwo:textOne
    isTextOne = !isTextOne
}

更新为了与iOS 10之前,watchOS 3和macOS 10.12兼容,因为旧版本没有基于块的计时器:

var isTextOne = true

func toggleText() {
    myLabel.text = isTextOne ? textTwo:textOne
    isTextOne = !isTextOne
}

let timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(toggleText), userInfo: nil, repeats: true)

答案 1 :(得分:0)

每10秒运行一些方法的最简单方法是将NSTimerrepeats = true一起使用。

override func viewDidLoad() {
    super.viewDidLoad()
    var timer = NSTimer.scheduledTimerWithTimeInterval(10, target: self, selector: #selector(update), userInfo: nil, repeats: true)
}

func update() {
    // Something cool
}

答案 2 :(得分:0)

您可以使用计时器或同步调度队列来完成此任务。

例如,您可以使用以下代码使用同步调度队列方法每五秒运行一次任务。

let current = 0

func display() {
    let deadline = DispatchTime.now() + .seconds(5)
    DispatchQueue.main.asyncAfter(deadline: deadline) {
        if self.current == 0 {
            MyLabel.text = "Hello world 1."
            self.current == 1
        } else if self.current == 1 {
            MyLabel.text = "Hello World 2."
            self.current == 0
        }
        self.display() // This will cause the loop.
    }
}