2014-10-08 2 views
3

UITableViewCell 안에 설정된 현재 시간을 타이머에 표시하는 사용자 지정 UIView이 있습니다. 사용자가 더 이상이 사용자 정의를보고 있지 않음을 감지하는 방법이 있습니까 UIView (다른 탭으로 이동하여 말하고있는 것)? 내 UIView이 더 이상 화면에 표시되지 않으면이 타이머를 중지하고 싶습니다. 스위프트를 사용하고 있습니다.iOS 내 UIView가 화면에 표시됩니까?

didMoveToWindow이라고하는 오버 라이드 할 수있는 방법이 있는데, 탭을 변경할 때 트리거되는 것처럼 보이지만 실제로는 iOS와 어떤 메소드 또는 속성에서보기가 실제로 이루어지는 지 알 수 없습니다. 사용자에게 보이거나 화면에 표시되지 않습니다.

viewDidAppear과 비슷한 방법이 필요하고 UIViewController의 경우 viewDidDisappear이 필요합니다.

미리 감사드립니다.

+0

가능한 중복 [UIViewController에의 뷰가 표시되는 경우 알 방법] (http://stackoverflow.com/ 질문/2777438/how-to-tell-if-uiviewcontrollers-view-is-visible) – Daniel

+0

나는 동의하지 않는다. 나는 명확히 할 텍스트를 업데이트했다. 보기에있을 때와 언제가는 지 알려주는 방법이 필요합니다. 만약 내가 타이머 나 그 일을 할 필요가 있다면, 내가 볼 수 없을 때 타이머를 멈추게하는 전체적인 시점은 사라졌습니다. – Bjarte

답변

7

나는 self.window이 전무 없거나하지 않을 경우이 목적을 위해 작동이에 대한 답변은, 단순히 didMoveToWindow을 무시하고 확인 발견

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

다른보기에서보기가 차단 된 경우에는 도움이되지 않습니다. – Hammer

+0

알아두면 좋지만 이것이 우리가 만든 앱에서 많은 도움이되었습니다. :) – Bjarte

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, 그래서 내 레이블 클래스에 독립형이며 밀접하게 결합 뭔가가 필요합니다. – Bjarte

+0

알았어, 미안해. 그러면 찾고있는 두 가지 방법은'awakeFromNib' (타이머 시작)과'deinit' (멈추기)입니다. 문제가 해결되면 알려주세요. – Nubji

관련 문제