2015-02-17 3 views
1

У меня есть массив с несколькими строками в нем, и textView показывает только одну строку из них (это работает уже отлично). Но теперь я хочу обновить текст, когда нажимаю кнопку. Но это не сработает. То, что я пытался и не работает:SWIFT: Как обновить текст из массива при нажатии кнопки?

@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

Если мы не увидим, что randomizeText мы не сможем вам помочь. –

+0

Да, введите код функции здесь –

+0

Я обновил свой первоначальный пост с полным кодом, также с помощью textView.setNeedsDisplay() без успеха. – Matt

ответ

0

Вам необходимо отправить текст, чтобы увидеть сообщение setNeedsDisplay(). Вы можете сделать это в своей функции randomizedText() или в refreshButtonDidPress() после того, как вы позвоните randomizedText().

Вам также необходимо установить либо text или attributedText собственности на TextView перед вызовом setNeedsDisplay()

+0

Привет Марк, я попробовал оба, но ничего (не перегрузочные другую строку) происходит с: @IBAction Func refreshButtonDidPress (отправитель: AnyObject) { randomizedText() textView.setNeedsDisplay() } – Matt

1

Вы должны присвоить text свойство UITextView в строку, которую вы хотите отобразить. UITextView не поддерживает ссылку на String, которую вы указали в массиве. Он копирует его. UITextView позаботится о собственных жеребьевках и когда его нужно будет перерисовать.

+0

Здесь я борюсь немного как справиться с этим. Должен ли я писать textView.text = randomText в функции refreshButtonDidPress, а также textView.setneedsdisplay()? – Matt

+0

Звучит неплохо.Я не уверен, что вам даже нужно вызвать setNeedsDisplay(), так как изменение текста, очевидно, должно будет обновить представление, поэтому оно может позаботиться о том, чтобы вызвать это сам. Попробуй. – Andy

Смежные вопросы