2014-10-08 90 views
3

我有一个自定义UIView与计时器显示当前时间,其中设置一个UITableViewCell内。有没有办法检测到用户不再查看这个定制UIView我有(通过导航到不同的标签)?当我的屏幕上不再显示UIView时,我想停止此计时器。我正在使用Swift。iOS是我的UIView在屏幕上可见吗?

我看到有一个我可以重写叫didMoveToWindow方法,这似乎当我改变标签被触发,但我不是很有经验的iOS和看什么方法或属性分辨的观点实际上是对用户可见或不在屏幕上。

我需要某种被调用的方法,类似于viewDidAppearviewDidDisappear对于UIViewController

提前致谢!

+0

可能重复[如何判断UIViewController的视图可见(http://stackoverflow.com/ (2777438/how-to-tell-if-uiviewcontrollers-view-is-visible) – Daniel 2014-10-08 11:31:33

+0

我不同意,我已经更新了文本以澄清。我需要一种方式来获得通知,当它在视图中并且当它通过时。如果我需要一个计时器或者其他方法来做到这一点,那么当我离开视图时停止计时器的整个过程就消失了。 – Bjarte 2014-10-08 11:36:25

回答

7

我找到了答案,这是为了这个目的的作品,只需覆盖didMoveToWindow,并检查是否self.window为零或不:

override func didMoveToWindow() { 
    if (self.window == nil) { 
     timerStop() 
    } else { 
     timerStart() 
    } 
} 
+0

这对于视图被其他视图阻止的情况无效。 – Hammer 2016-02-12 06:33:43

+0

很有意思,但是这对我们制作的应用程序有很大的帮助。 :) – Bjarte 2016-02-12 11:15:43

0

处理行动的最佳做法视图时不再显示给用户是通过覆盖viewWillAppear和viewDidDisappear函数。

要启动定时器:

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

    timerStart() 
} 

然后停止你的定时器:

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

    timerStop() 
} 
+1

'viewWillAppear'和'viewDidDisappear'来自'UIViewController',所以我不能使用这些,除非我有一个'UIViewController'来创建这些事件,这完全违背了我之后的目的。我有一个viewcontroller - > tableview - > tableviewcell - > mylabelclass,所以我需要在我的labelclass中独立并且不紧密耦合的东西。 – Bjarte 2014-10-09 06:32:26

+0

好吧,对不起我的坏。 然后你要找的两个方法是'awakeFromNib'(启动计时器)和'deinit'(停止它)。 试试这个,让我知道这是否解决了你的问题。 – Nubji 2014-10-10 07:36:00

相关问题