관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] ViewController에서 현재 보여지는 화면인지 확인하는 방법 (viewIfLoaded 사용) 본문

iOS 응용 (swift)

[iOS - swift] ViewController에서 현재 보여지는 화면인지 확인하는 방법 (viewIfLoaded 사용)

jake-kim 2021. 9. 1. 23:11

viewIfLoaded 개념

  • 뷰 컨트롤러의 뷰가 로드된 경우, UIView 표출

  • 뷰 컨트롤러가 현재 화면에 보여지는지 확인하는 코드
viewIfLoaded?.window != nil // true이면 현재 보여지는 화면, flase이면 현재 보여지지 않는 화면

확인 - navigationController

  • 두 번째 화면에서 notificationCenter로 각각 ViewController에서 viewIfLoaded?.window가 nil인지 체크

  • 첫번째 화면
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self, selector: #selector(printSome), name: .noti, object: nil)
    }

    @objc func printSome() {
        print("VC1 = \(viewIfLoaded?.window != nil)")
    }
}
  • 두번째 화면
class ViewController2: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    @IBAction func didTapButton(_ sender: Any) {
        NotificationCenter.default.post(name: .noti, object: nil)
        print("VC2 = \(viewIfLoaded?.window != nil)")
    }
}

extension Notification.Name {
    static let noti = NSNotification.Name("noti")
}
  • 결과

확인 - modal

  • 준비
class ViewController3: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    @IBAction func didTapButton(_ sender: Any) {
        NotificationCenter.default.post(name: .noti, object: nil)
        print("VC3 = \(viewIfLoaded?.window != nil)")
    }
}
  • 결과: present는 보여지고 있는 형태

Comments