我有一个包含多个字符串的数组,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
}
但我没有胶水在扩展名中有什么问题。
答案 0 :(得分:1)
您必须将text
的{{1}}属性分配给要显示的String。 UITextView
不会保留对数组中给出的String的引用。它复制它。 UITextView
会处理它自己的绘制调用以及何时需要重绘。
答案 1 :(得分:0)
您需要向文本视图发送setNeedsDisplay()
消息。您可以在致电randomizedText()
后在refreshButtonDidPress()
功能或randomizedText()
中执行此操作。
在调用text
之前,您还需要在textView上设置attributedText
或setNeedsDisplay()
属性