我有一个使用UITableViewCell
的自定义NSTimer
。当屏幕弹出时,如何停止或使计时器无效。
我试过了
- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath;
但它似乎不起作用。
提前致谢。
答案 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
}
}