当它们离开屏幕时,与自定义UITableViewCells关联的NSTimers无效/停止

时间:2014-05-09 04:36:08

标签: ios objective-c uitableview nstimer

我有一个使用UITableViewCell的自定义NSTimer。当屏幕弹出时,如何停止或使计时器无效。

我试过了

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

但它似乎不起作用。

提前致谢。

3 个答案:

答案 0 :(得分:0)

为了实现这一目标,需要做一些事情:

1)

您是否在UITableView上设置了委托?

2)

您是否正在使用iOS 6&较新的?

如果您在“didEndDisplayingCell:”中设置断点,请确保您使正确的计时器无效。并且还将自定义单元格的计时器属性或ivar设置为nil以确保双倍。

答案 1 :(得分:0)

您可以使用viewWillDisappear或viewDidDisappear,具体取决于您希望定时器何时停止。第一个可能是你最好的选择。并让它直接或通过通知使定时器无效。

正如迈克尔在答案中所说的那样,确保在你使它们失效后将计时器设置为零。

答案 2 :(得分:0)

您可以使用NSNotificationCenter停止UITableviewCell的计时器

UITableViewCell文件中的第1步

CREATE OR REPLACE TRIGGER after_invoice_insert
 AFTER INSERT
    ON invoices
   FOR EACH ROW
BEGIN
   INSERT INTO invoice_statuses
     ( invoice_id, status, insertts, invoice_body_xml )
   VALUES
     ( :new.invoice_id, n'NEW', SYSDATE, :new.invoice_body_xml );
END;
/

CREATE OR REPLACE TRIGGER after_invoice_statuses_insert
 AFTER INSERT
    ON invoice_statuses
   FOR EACH ROW
BEGIN
    INSERT INTO open_invoices
      ( invoice_id, invoice_body_xml, status, transaction_id, transaction_index, insertts )
   VALUES
     ( :new.invoice_id, :new.invoice_body_xml, :new.status, :new.transaction_id, :new.transaction_index, SYSDATE );
END;
/

ViewController文件中的第2步

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
        }
    }