ios - Swift update UILabel with dispatch_async not working -
why doesn't work?
dispatch_async(dispatch_get_main_queue(), { self.timestringlabel.text = "\(self.timestringselected)" println(self.timestringlabel.text) })
i'm trying update label in swift ui label never changes. keep googling it, can't find responses don't use dispatch_async. doing wrong?
1st edit: mistaken. i'm not printing updated text. text never changes. prints out optional("0") if helps. default value 0 defined in storyboard.
i have tried , without dispatch_async without success. tried adding self.timestringlabel.setneedsdisplay() after updating text, doesn't work.
edit 2: here's complete function + uilabel declaration
@iboutlet weak var timenumberlabel: uilabel! @ibaction func timenumberbuttonpressed(sender: uibutton) { println("number selected. tag \(sender.tag)") dispatch_async(dispatch_get_main_queue()) { self.timenumberonebutton.selected = false self.timenumbertwobutton.selected = false self.timenumberthreebutton.selected = false self.timenumberfourbutton.selected = false if sender.tag == 0{ self.timenumberselected = 0 } else if sender.tag == 1 { self.timenumberselected == 5 } else if sender.tag == 2 { self.timenumberselected == 10 } else { self.timenumberselected == 24 } sender.selected = true self.timenumberlabel.text = "\(self.timenumberselected)" self.timenumberlabel.setneedsdisplay() println(self.timenumberlabel.text) } }
the label visible shown in picture. didn't think hard implement, wrong. i'm willing bet it's simple i'm missing.
try adding line
self.timestringlabel.setneedsdisplay()
(after label change)
because code run asynchronously, interface-updating methods may miss change , not display (especially if time-consuming bit of code occurs before label change). adding code forces interface check , display changes may have missed.
this should used after asynchronous task changes interface, task's running may overlap interface methods, resulting in missed change.
*thanks ios development journal
Comments
Post a Comment