navigation controller를 코드로 구현할 때

3 답변 글타래를 보이고 있습니다
  • 글쓴이
    • 쥬트
      참가자
      • 글작성 : 9
      • 답글작성 : 8

      네비게이션 컨트롤을 뷰컨트롤러에 임베드할 때 스토리보드로 굉장히 간단하게 구현이 가능합니다만,

      따로 스토리보드로 생성하지 않고 뷰컨을 임베드하는 방법이 궁금합니다 !

      여러 자료를 찾아보면서 알아본 결과는 AppDelegate에

      class AppDelegate: UIResponder, UIApplicationDelegate {
          var window: UIWindow?
      
          func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
              // Override point for customization after application launch.
      
              // 루트 뷰 컨트롤러가 될 뷰 컨트롤러를 생성
              let rootViewController = ViewController(nibName: nil, bundle: nil)
      
              // 위에서 생성한 뷰 컨트롤러로 내비게이션 컨트롤러를 생성
              let navigationController = UINavigationController(rootViewController: rootViewController)
      
              self.window = UIWindow(frame: UIScreen.main.bounds)
              // 윈도우의 루트 뷰 컨트롤러로 내비게이션 컨트롤러를 설정
      
              self.window?.rootViewController = navigationController
              self.window?.makeKeyAndVisible()
              return true
          }
          ...
      }
      

      이러한 코드를 추가해주면 된다는데 잘 안됩니다 ㅠ 문제점이 무엇인지 궁금합니다 !!

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

      이 글 쓰레드를 참고해보세요.
      최신버전의 Xcode를 쓰고 있고, 타킷 버전이 13이상이면 AppDelegate.swift 파일에 있는 내용만 수정해서 될것 같진 않네요.

    • 쥬트
      참가자
      • 글작성 : 9
      • 답글작성 : 8

      참고 하겠습니다 !! 감사합니다 ~~~

    • 멍단비
      참가자
      • 글작성 : 10
      • 답글작성 : 98

      Xcode버전이 최신이면 자동적으로 SceneDelegate가 생성되서 안되실거에요.

      iOS13부터는 SceneDelegate라는 녀석이 생겼고, AppDelegate가 하던 일을 일부 SceneDelegate가 가져왔어요.

      위에 적으신 코드를 SceneDelegate로 옮기시면 잘 동작은 하겠지만, iOS13미만의 버전을 앱의 타겟으로 잡고 실행하면 iOS13이상의 소프트웨어가 있는 기기에서는 잘동작하겠지만,
      그렇지 않은 경우에는 앱이 동작하지 않고 검은 화면만 보이실거에요.(윈도우가 없으니까요)

      위에서 말씀드린대로 SceneDelegate는 iOS13부터 생긴녀석이에요. 따라서, 13미만에서는 어떠어떻게 동작하도록 처리를 따로 해주셔야해요.

      만약에 아래와 같은 조건을 충족한다면 위에 적으신것처럼 AppDelegate만 사용하고 SceneDelegate는 지워버리면 되겠지만,
      그렇지 않은 경우라면 따로 미래를 생각해서 호환성을 위해 분기처리는 해주시는게 좋습니다~ AppDelegate와 SceneDelegate의 차이는 검색하면 글이 엄청나게 많으니 한 번 보셔요~

      1)절대로 아이패드는 지원하지 않을것이고(멀티윈도우를 구현하지 않을거고)
      2)iOS13이상의 버전만 지원할것이다.(통상적으로는 11?10?부터 지원해서 현실적이진 않아요)

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

logo landscape small

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