스토리보드 없이 코드로 대체하는 방법
(init) 2022.01.07: iOS 13.0 이상만 적용 가능한코드
(update) 2022.02.25: iOS 13.0 미만 버전에서도 사용 가능하게끔 추가
- 13.0을 기준으로 SceneDelegate가 생김.
(update) 2022.11.03: Xcode 14 대응
✅ 이번 시간에는 스토리보드 없이 코드로 대체하는 방법에 대해서 알아볼 예정이야.
⚙️ Xcode 13.0 기준
👉 Target iOS 13.0 이상
👉 Target iOS 13.0 미만
✅ iOS 13.0이상
1. 처음 단계로는 프로젝트 파일에서 Main.storyboard 파일을 없애 줍니다.
2. Info.plist파일로가서 storyboard Name을 지워줍니다.
3. 프로젝트 타겟으로 이동하여서 Main Interface 부분을 비워줍니다.
(update) 2022.11.03: Xcode 14 대응 단 Xcode 14이상을 사용한다면? Main interface 저 부분을 아래처럼 대응합니다.
4. SceneDelegate.Swift 파일을 수정합니다.
<< 아래의 코드를 추가하기! >>
guard let windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow(frame: windowScene.coordinateSpace.bounds)
window?.windowScene = windowScene
window?.rootViewController = ViewController(nibName: nil, bundle: nil) // 루트 뷰컨트롤러 생성
window?.makeKeyAndVisible()
검은화면으로 뜨는데, 이건 ViewContoller에서 뷰의 백그라운드의 색을 직접 지정해주어야 합니다.
< 포스팅 이후에 글 수정 > 아래의 코드가 더 간결하고 좋습니다:)
// 글 포스팅 이후에 수정!! 더 간결한 코드를 발견했어요:)
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow(windowScene: windowScene)
window?.backgroundColor = .systemBackground
window?.rootViewController = ViewController()
window?.makeKeyAndVisible()
}
👉 이후에 실행하면 완료!
그렇다면 UINavigationView를 Embed in하기 위해서는 어떻게 해야할까?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow(windowScene: windowScene)
window?.backgroundColor = .systemBackground
window?.rootViewController = UINavigationController(rootViewController: ViewController())
window?.makeKeyAndVisible()
}
위와 같이 바꿔주면 된다.
✅ iOS 13.0 미만
그렇다면 SceneDelegate가 없는 13.0미만에서는 어떻게 해야 할까?
폴더의 구조를 위의 사진과 같이 만들어주세요.
스토리보드와 SceneDelegate를 지웠습니다.
Info.plist파일 안에 Application Scene Manifest를 삭제해주세요.
위의 사진과 같이 만들어주시면 됩니다.
🟠 AppDelegate.swift
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
window?.backgroundColor = .yellow
window?.makeKeyAndVisible()
window?.rootViewController = UINavigationController(rootViewController: ViewController())
return true
}
}
위와 같은 코드로 작성해주세요.
<<약간의 주의사항>>
window?.backgroundColor을 설정할 때, 그 위의 있는 코드보다 먼저 작성하게 되면, 색상이 적용되지 않습니다.
Xcode 14이상을 사용한다면, 제일 아래 부분 Main storyboard file base name
'project > Kuring(공지알림)' 카테고리의 다른 글
[iOS] Haptic Feedback에 대해서 알아보자🐣 (0) | 2022.03.21 |
---|---|
[iOS] inAppReview(StoreKit)✨ (0) | 2022.03.06 |
[iOS] RxGesture에 정리 기본 (0) | 2021.12.20 |
iOS UIButton 90도 회전시키기 (0) | 2021.12.20 |
iOS StackView Button 추가하기 (0) | 2021.12.19 |