2014-10-08 88 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

相關問題