2015-05-08 4 views
0

У меня есть UILabel в моем приложении, в котором отображаются сообщения чата. Эти сообщения чата жестко закодированы как массив строк. Мне нужно отображать эти сообщения по одному на UILabel, но мне нужно иметь определенную 2-секундную задержку между переключением сообщений, поскольку пользователю необходимо прочитать каждое сообщение.Отображение текстов один за другим в том же UILabel

Что я реализовали это следующий код:

for chatText in chatDialogue{ 


       dispatch_async(dispatch_get_main_queue(), { 

        chatLabel.text=chatText as? String 
       }) 
       println(chatText) 
       NSThread .sleepForTimeInterval(2) 
      } 

здесь мы имеем массив chatDialogues

["Hello","How are you?","Can you say DIAS","Wait Please"] 

Теперь мне нужно это будет отображаться на том же лейбле, но с задержкой скажем между изменением сообщений.

Приведенная выше реализация при выполнении показала только последнее сообщение в цикле.

+0

бы не 'NSThread .sleepForTimeInterval (2)' блок основной поток поэтому интерфейс не может быть обновлен, чтобы вы не видите изменения на ярлыке? Может быть, вызывать 'layoutIfNeeded' после установки текста. Не знаю, хотя, просто догадываясь. – Artrmz

ответ

0

Настройка NSTimer, который стреляет каждые 2 секунды и останавливается при достижении последнего текста:

// instance variables 
let chatDialoges = ["Hello","How are you?","Can you say DIAS","Wait Please"] 
var textIndex = 0 
var timer: NSTimer? 

// ... 

// somewhere where the timer should start 
self.timer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: "update", userInfo: nil, repeats: true) 

// 

func update() { 
    self.textLabel++ 

    if self.textLabel == chatDialoges.count { 
     self.timer?.invalidate() 
     return 
    } 

    chatLabel.text = chatDialoges[self.textIndex] 
} 
+0

Привет! Я искал гораздо более простое решение. – Raon

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