SWIFT:如何在按下按钮时从数组刷新textview?

时间:2015-02-17 12:12:21

标签: arrays swift uitextview

我有一个包含多个字符串的数组,textView只显示了一个字符串(这已经很完美了)。但是现在我想在按下按钮时刷新textview。但它不起作用。我尝试过但不起作用:

@IBAction func refreshButtonDidPress(sender: AnyObject) {
randomizedText()
}

randomizedText()是一个函数,我只是加载我的随机字符串数组。而且我在viewDidLoad中调用此函数,因此启动时的textView不为空。

希望你能提供帮助。

使用完整代码进行更新:

函数randomizedText():

func randomizedText() {
    textView.text = randomIdioms
    textView.selectable = false
}

randomIdioms来自以下单独的扩展名:

extension Int {
    public static func randomIn(#range: Range<Int>) -> Int {
        let difference = range.endIndex - range.startIndex
        let randomPick = arc4random_uniform(UInt32(difference))
        return Int(randomPick) + range.startIndex
    }
}

let idioms = [
    "One Two Test",
    "This is the second exampleThis is the second example",
    "The last exampleThe last exampleThe last exampleThe last example"
]
let randomIdioms = idioms[Int.randomIn(range: 0..<idioms.count)]

像建议一样,现在我尝试了:

@IBAction func refreshButtonDidPress(sender: AnyObject) {
randomizedText()
textView.setNeedsDisplay()
}

但这不起作用。我可以多次按下刷新按钮,而不用另一个字符串重新刷新textView。

随机工作的下一次更新: 我没有在扩展中使用随机生成,而是在我的func中尝试了这个并在@IBAction中调用它有趣的refreshButtonDidPress并且它可以工作:

func randomizedText() {
    let idioms = ["One Two Test", "This is the second exampleThis is   the second example", "I am not the idiom", "The last exampleThe last exampleThe last exampleThe last example"]
    let index = Int(arc4random_uniform(UInt32(idioms.count)))
    textView.text = idioms[index]
    textView.selectable = false
}

但我没有胶水在扩展名中有什么问题。

2 个答案:

答案 0 :(得分:1)

您必须将text的{​​{1}}属性分配给要显示的String。 UITextView不会保留对数组中给出的String的引用。它复制它。 UITextView会处理它自己的绘制调用以及何时需要重绘。

答案 1 :(得分:0)

您需要向文本视图发送setNeedsDisplay()消息。您可以在致电randomizedText()后在refreshButtonDidPress()功能或randomizedText()中执行此操作。

在调用text之前,您还需要在textView上设置attributedTextsetNeedsDisplay()属性