ios - Update Custom Cell UIButton title when NSNotification is posted -


i have uitableviewcontroller bunch of custom cells have playbutton in them. in cellforrowatindexpath, assign tag is equal indexpath of button, when playbutton pressed, set title of button "stop". changes "stop", should, , when press "stop", changes "play".

where i'm having difficulty when sound stops playing on own, absent user intervention. set observer listen mp3 player being done. added observer in viewdidload of mytableviewcontroller:

here variables use facilitate changing title of playbutton in cells:

// variables facilitate changing playbutton title var indexpathofplaybutton = int() var isplaying: bool = false 

in viewdidload of mytableviewcontroller, add observer:

    nsnotificationcenter.defaultcenter().addobserver(self, selector: "resetplaybutton", name: resetplaybuttonnotification, object: nil) 

here's playmp3 method on mytableviewcontroller:

func playmp3(sender: anyobject) {      if isplaying == false {         isplaying = true         // gets indexpath of button sent playmp3 request         let indexpath = sender.tag         sender.settitle("stop", forstate: uicontrolstate.normal)          // sets indexpath of playbutton we'll redraw button when receives notification?         indexpathofplaybutton = indexpath          if resultssearchcontroller.active {             let soundtoplay = self.filteredsounds[indexpath]             let soundfilename = soundtoplay.soundfilename string             mp3player = mp3player(filename: soundfilename)             mp3player.play()         } else {             let soundtoplay = self.unfilteredsounds[indexpath]             let soundfilename = soundtoplay.soundfilename string             mp3player = mp3player(filename: soundfilename)             mp3player.play()         }     }      else if isplaying == true {         isplaying = false         sender.settitle("play", forstate: uicontrolstate.normal)         mp3player.stop()     } } 

in mp3player class, delegate method use post notification it's done:

func audioplayerdidfinishplaying(player: avaudioplayer, flag: bool) {     if currenttrackindex == tracks.count - 1 {         print("end of playlist reached")         player.stop()         nsnotificationcenter.defaultcenter().postnotificationname(resetplaybuttonnotification, object: self)     }      else if flag == true {         print("advance next track")         nextsong(true)     } } 

lastly, method on mytableviewcontroller gets called when notification posted:

func resetplaybutton() {     print("resetplaybuttoncalled")     // todo: how hold of button , change title outside playmp3? } 

you have lot of code, not related problem mentioned above. if understood problem don't know how update button in observer selector resetplaybutton(). button in tableview cell , have stored index in indexpathofplaybutton. can cell like:

let cell: yourcellclass = tableview.cellforindexpath(nsindexpath(foritem: indexpathofplaybutton, insection: 0)) 

and after cell, can update output.

another way call reloaddata()


Comments

Popular posts from this blog

php - Invalid Cofiguration - yii\base\InvalidConfigException - Yii2 -

How to show in django cms breadcrumbs full path? -

ruby on rails - npm error: tunneling socket could not be established, cause=connect ETIMEDOUT -