/ / Invalidate / Stop NSTimers associated with custom UITableViewCells when they go offscreen - ios, Objective-C, Uitableview, Nstimer

Invalidate / Stop NSTimers spojené s vlastnými UITableViewCells, keď idú mimo obrazovku - ios, object-c, uitableview, nstimer

Mám prispôsobené UITableViewCell ktorá využíva a NSTimer. Ako zastavím alebo zneplatním časovač, keď sa objaví obrazovka.

skúsil som

- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath;

ale zdá sa, že to nefunguje.

Vopred ďakujem.

odpovede:

0 pre odpoveď č. 1

Aby to fungovalo, musí byť zavedených niekoľko vecí:

1)

Nastavili ste vo svojom UITableView delegáta?

2)

Používate systém iOS 6 a novší?

Ak nastavíte bod prerušenia vdidEndDisplayingCell:„, ubezpečte sa, že znehodnocujete správny časovač. A tiež si nastavte vlastnosť časovača alebo ivaru vlastnej bunky na nulu, aby ste si boli istí dvojnásobne.


0 pre odpoveď č. 2

Pravdepodobne by ste mohli ísť s viewWillDisappear aleboviewDidDisappear, podľa toho, kedy presne chcete, aby sa časovač zastavil. Prvá je pravdepodobne vaša najlepšia stávka. A nechajte ho zneplatniť časovač (y), buď priamo, alebo prostredníctvom oznámenia.

A ako povedal Michael vo svojej odpovedi, nezabudnite nastaviť časovače na nulu po tom, ako ich zneplatníte.


0 pre odpoveď č. 3

Časovač pre UITableviewCell môžete zastaviť pomocou NSNotificationCenter

Krok 1 v súbore UITableViewCell

override func awakeFromNib() {
super.awakeFromNib()

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.stopTimer), name: "stopTimer", object: nil)
}

func stopTimer(){
if self.couponTimer != nil {
self.couponTimer?.invalidate()
self.couponTimer = nil
}
}

Krok 2 v súbore ViewController

override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(animated)

NSNotificationCenter.defaultCenter().postNotificationName("stopTimer", object: nil)
}