detecting background => foreground in ViewController

1 답변 글타래를 보이고 있습니다
  • 글쓴이
    • 5anniversary
      참가자
      • 글작성 : 14
      • 답글작성 : 7

      이번 시간에는 백그라운드에서 포그라운드로 돌아갈 때 뷰 컨트롤러에서 탐지를 하고 뷰 컨트롤러 안에서 사용하는 방법에 대해 알아볼 거예요!!

      기본적으로 제공이 되는 AppDelegate.swift, SceneDelegate.swift에서 제공되는

      // in AppDelegate.swift
      func applicationWillEnterForeground(_ application: UIApplication) {
          print(#function)
      }
      
      // in SceneDelegate.swift
      func sceneWillEnterForeground(_ scene: UIScene) {
          print(#function)
      }
      

      메서드로 백그라운드에서 포그라운드로 돌아오는 것을 탐지할 수 있지만

      저의 경우에는 돌아올 때 해당 뷰 컨트롤러 안에서 특정한 클래스를 호출해 뷰 컨트롤러 위에 덧붙여야 할 필요가 있어 아래와 같은 방법을 사용했습니다.

      class VC: UIViewController {
      
          private var observer: NSObjectProtocol?
      
          override func viewDidLoad() {
              observer = NotificationCenter.default.addObserver(forName: UIApplication.willEnterForegroundNotification,
                                                                object: nil, 
                                                                queue: .main) { 
                                                                [unowned self] notification in
                  // background에서 foreground로 돌아오는 경우 실행 될 코드 
      
              }
          }
      }
      

      해당 방법을 사용하게 되면 어떤 뷰에서 백그라운드 ->> 포그라운드로 돌아오게 되었는지 탐지가 가능하게 됩니다.

      그리고 해당하는 방법을 사용하면서 생기는 주의점이 있는데요!!

      네비게이션 컨트롤러로 뷰컨트롤러가 쌓이게 되면 쌓이는 모든 뷰컨트롤러에서 해당 노티피케이션을 가지고 있기 때문에

      네비게이션 루트 뷰 컨트롤러에서도 해당 코드를 작성하게 된 경우 back 버튼을 누르는 순간 루트 뷰에서도 해당 코드 안에 실행되는 코드가

      실행이 됩니다. 따라서, 분기 처리를 통해서 코드를 작성해주셔야 합니다.

    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 579

      뷰컨트롤러가 deinit 될 때 removeObserver 해주는 것도 중요합니다! 🙂

1 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 743-81-02195
통신판매업 신고번호 : 제 2022-충북청주-1278 호
고객센터 : 카카오톡채널 @yagom