programing

스토리보드를 사용하여 초기 뷰 컨트롤러를 프로그래밍 방식으로 설정합니다.

muds 2023. 4. 21. 21:31
반응형

스토리보드를 사용하여 초기 뷰 컨트롤러를 프로그래밍 방식으로 설정합니다.

으로 「 」를 하면,InitialViewController발매마다 다른 상황에 따라 스토리보드를 다른 뷰로 열고 싶습니다.

더미 초기 뷰 컨트롤러를 사용하지 않는 방법

모든 초기 뷰 컨트롤러에 스토리보드 ID가 있는지 확인합니다.

스토리보드의 첫 번째 뷰 컨트롤러에서 "Is initial View Controller" 속성을 선택 취소합니다.

시점에서 앱을 실행하면 다음과 같이 표시됩니다.

UIMainStoryboardFile 'MainStoryboard'에 대한 기본 뷰 컨트롤러를 인스턴스화하지 못했습니다. 지정된 진입점이 설정되지 않았을 수 있습니다.

앱 대리자의 창 속성이 0으로 표시됩니다.

하여 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★Info탭. 여. tab 값 、 여 、 어 、 어 、 the 、 tab 、 tab 、 tab 。Main storyboard file base name. 에서에서General 「」, 「」의 값을 합니다.Main Interface 가 제거됩니다. 그러면 경고가 제거됩니다.

대리자의 보기 보기 .application:didFinishLaunchingWithOptions:★★★★

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

    UIViewController *viewController = // determine the initial view controller here and instantiate it with [storyboard instantiateViewControllerWithIdentifier:<storyboard id>];

    self.window.rootViewController = viewController;
    [self.window makeKeyAndVisible];

    return YES;
}

모든 Swift 애호가들에게 @Travis가 SWIFT로 번역한 답변은 다음과 같습니다.

목표 C 코드 앞에 @Travis가 설명한 대로 수행합니다.그리고나서,

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    var exampleViewController: ExampleViewController = mainStoryboard.instantiateViewControllerWithIdentifier("ExampleController") as! ExampleViewController

    self.window?.rootViewController = exampleViewController

    self.window?.makeKeyAndVisible()

    return true
}

ExampleViewController표시하는 새로운 초기 뷰 컨트롤러가 됩니다.

순서는 다음과 같습니다.

  1. 현재 창의 크기를 사용하여 새 창을 만들고 주 창으로 설정합니다.
  2. 새로운 초기 뷰 컨트롤러를 작성하기 위해 사용할 수 있는 스토리보드를 인스턴스화합니다.
  3. 스토리보드 ID를 기반으로 새로운 초기 뷰 컨트롤러 인스턴스화
  4. 새 창의 루트 뷰 컨트롤러를 방금 시작한 새 컨트롤러로 설정
  5. 새 창을 표시합니다.

즐겁고 행복한 프로그래밍!

는 rootViewController에서 할 수 .(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions

예를 들어 다음과 같습니다.

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if (shouldShowAnotherViewControllerAsRoot) {
        UIStoryboard *storyboard = self.window.rootViewController.storyboard;
        UIViewController *rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"rootNavigationController"];
        self.window.rootViewController = rootViewController;
        [self.window makeKeyAndVisible];
    }

    return YES;
}

SWIFT 5

스토리보드에서 ViewController를 초기 ViewController로 설정하지 않은 경우 다음 두 가지 작업을 수행해야 합니다.

  1. 프로젝트 타겟으로 이동하여 프로젝트 -> 일반 -> 메인 인터페이스 필드를 클리어합니다.
  2. 프로젝트 Targets 내에서는 항상 Info -> Application Scene Manifest -> Scene Configuration -> Application Session Role -> Item 0 (Default Configuration) -> 스토리보드 이름 필드를 삭제합니다.

마지막으로 SceneDelegate에서 코드를 추가할 수 있습니다.

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
    guard let windowScene = (scene as? UIWindowScene) else { return }

    window = UIWindow(windowScene: windowScene)


    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    // Make sure you set an Storyboard ID for the view controller you want to instantiate
    window?.rootViewController = storyboard.instantiateViewController(withIdentifier: identifier)
    window?.makeKeyAndVisible()

}

Swift 3: @victor-sigler 코드로 업데이트

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.main.bounds)

    // Assuming your storyboard is named "Main"
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

    // Add code here (e.g. if/else) to determine which view controller class (chooseViewControllerA or chooseViewControllerB) and storyboard ID (chooseStoryboardA or chooseStoryboardB) to send the user to

    if(condition){
        let initialViewController: chooseViewControllerA = mainStoryboard.instantiateViewController(withIdentifier: "chooseStoryboardA") as! chooseViewControllerA
        self.window?.rootViewController = initialViewController
    )
    }else{
        let initialViewController: chooseViewControllerB = mainStoryboard.instantiateViewController(withIdentifier: "chooseStoryboardB") as! chooseViewControllerB
        self.window?.rootViewController = initialViewController
    )

    self.window?.makeKeyAndVisible(

    return true
}

Navigation rootview controller를 메인 뷰 컨트롤러로 설정할 수 있습니다.이 아이디어는 응용 프로그램 요건에 따라 자동 로그인에 사용할 수 있습니다.

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];

UIViewController viewController = (HomeController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"HomeController"];

UINavigationController navController = [[UINavigationController alloc] initWithRootViewController:viewController];

 self.window.rootViewController = navController;

if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {

    // do stuff for iOS 7 and newer

    navController.navigationBar.barTintColor = [UIColor colorWithRed:88/255.0 green:164/255.0 blue:73/255.0 alpha:1.0];

    navController.navigationItem.leftBarButtonItem.tintColor = [UIColor colorWithRed:88/255.0 green:164/255.0 blue:73/255.0 alpha:1.0];

    navController.navigationBar.tintColor = [UIColor whiteColor];

    navController.navigationItem.titleView.tintColor = [UIColor whiteColor];

    NSDictionary *titleAttributes =@{

                                     NSFontAttributeName :[UIFont fontWithName:@"Helvetica-Bold" size:14.0],

                                     NSForegroundColorAttributeName : [UIColor whiteColor]

                                     };

    navController.navigationBar.titleTextAttributes = titleAttributes;

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

}

else {

    // do stuff for older versions than iOS 7

    navController.navigationBar.tintColor = [UIColor colorWithRed:88/255.0 green:164/255.0 blue:73/255.0 alpha:1.0];



    navController.navigationItem.titleView.tintColor = [UIColor whiteColor];

}

[self.window makeKeyAndVisible];

StoryboardSegue 사용자용

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];

// Go to Login Screen of story board with Identifier name : LoginViewController_Identifier

LoginViewController *loginViewController = (LoginViewController*)[mainStoryboard instantiateViewControllerWithIdentifier:@“LoginViewController_Identifier”];

navigationController = [[UINavigationController alloc] initWithRootViewController:testViewController];

self.window.rootViewController = navigationController;

[self.window makeKeyAndVisible];

// Go To Main screen if you are already Logged In Just check your saving credential here

if([SavedpreferenceForLogin] > 0){
    [loginViewController performSegueWithIdentifier:@"mainview_action" sender:nil];
}

감사해요.

메인스토리보드를 열고 먼저 시작할 뷰를 선택한 후 유틸리티 --> 속성을 엽니다."View Controller" 아래에 "Is initial View Controller" 라디오 버튼이 있습니다.그냥 선택해주세요.

--- 개정된 질문에 대해:

초기 뷰의 ViewDidLoad 섹션에 메서드를 작성하고 응용 프로그램 부팅 시 메서드가 실행되면 다른 뷰로 segue를 트리거합니다.

불가능할 것 같아요.대신 다른 뷰 컨트롤러에 대한 세그먼트가 있는 초기 컨트롤러를 1개 가질 수 있습니다.시작 시 프로그래밍 방식으로 수행할 sege를 결정할 수 있습니다.

설정할 수 .initial view controllerInterface Builder interface interface interface 。

다음은 프로그래밍 방식으로 사용되는 접근법입니다.

목표-C:

        self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

        UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"]; // <storyboard id>

        self.window.rootViewController = viewController;
        [self.window makeKeyAndVisible];

        return YES;

신속:

        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

        var objMainViewController: MainViewController = mainStoryboard.instantiateViewControllerWithIdentifier("MainController") as! MainViewController

        self.window?.rootViewController = objMainViewController

        self.window?.makeKeyAndVisible()

        return true

Swift 3 및 Swift 4를 사용하여 강제 캐스팅을 회피하는 또 다른 솔루션은 다음과 같습니다.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.main.bounds)
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    guard let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewController") as? YourViewController else {
        return false
    }
    self.window?.rootViewController = viewController
    self.window?.makeKeyAndVisible()
    return true
}

아래는 와 함께 사용하고 있습니다.UINavigationController

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.main.bounds)
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    guard let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewController") as? YourViewController else {
        return false
    }
    let navigationController = UINavigationController(rootViewController: viewController)
    self.window?.rootViewController = navigationController
    self.window?.makeKeyAndVisible()
    return true
}

»AppDelegate.swift을 사용하다

let sb = UIStoryboard(name: "Main", bundle: nil)
let vc = sb.instantiateViewController(withIdentifier: "YourViewController_StorboardID")
self.window?.rootViewController = vc
self.window?.makeKeyAndVisible()

물론 적절한 뷰 컨트롤러를 선택하는 기준에 따라 논리를 구현해야 합니다.

또, 아이덴티티를 추가하는 것도 잊지 말아 주세요(스토리보드 -> 컨트롤러 장면 -> 아이덴티티 인스펙터 표시 -> 스토보드의 할당).아이디)

iOS 13+에서 장면 대리인을 사용하는 경우:

꼭 기입해 주세요.Info.plist을 사용하다

Application Scene Manifest > Scene Configuration > Application Session Role > Item 0

메인 스토리보드에 대한 참조도 삭제합니다.그렇지 않으면 스토리보드에서 인스턴스화하지 못한 경우에도 동일한 경고가 표시됩니다.

앱 에서 씬 메서드로 를 이동합니다.scene(_:willConnectTo:options:)라이프 사이클이벤트가 처리되기 때문입니다.

다이내믹 네비게이션을 처리하고 깨끗한 AppDelegate 클래스를 유지하기 위해 라우팅 클래스를 만들었습니다.다른 클래스에도 도움이 되었으면 합니다.

//
//  Routing.swift
// 
//
//  Created by Varun Naharia on 02/02/17.
//  Copyright © 2017 TechNaharia. All rights reserved.
//

import Foundation
import UIKit
import CoreLocation

class Routing {

    class func decideInitialViewController(window:UIWindow){
        let userDefaults = UserDefaults.standard
        if((Routing.getUserDefault("isFirstRun")) == nil)
        {
            Routing.setAnimatedAsInitialViewContoller(window: window)
        }
        else if((userDefaults.object(forKey: "User")) != nil)
        {
            Routing.setHomeAsInitialViewContoller(window: window)
        }
        else
        {
            Routing.setLoginAsInitialViewContoller(window: window)
        }

    }

    class func setAnimatedAsInitialViewContoller(window:UIWindow) {
        Routing.setUserDefault("Yes", KeyToSave: "isFirstRun")
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let animatedViewController: AnimatedViewController = mainStoryboard.instantiateViewController(withIdentifier: "AnimatedViewController") as! AnimatedViewController

        window.rootViewController = animatedViewController
        window.makeKeyAndVisible()
    }

    class func setHomeAsInitialViewContoller(window:UIWindow) {
        let userDefaults = UserDefaults.standard
        let decoded  = userDefaults.object(forKey: "User") as! Data
        User.currentUser = NSKeyedUnarchiver.unarchiveObject(with: decoded) as! User

        if(User.currentUser.userId != nil && User.currentUser.userId != "")
        {
            let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
            let homeViewController: HomeViewController = mainStoryboard.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
            let loginViewController: UINavigationController = mainStoryboard.instantiateViewController(withIdentifier: "LoginNavigationViewController") as! UINavigationController
            loginViewController.viewControllers.append(homeViewController)
            window.rootViewController = loginViewController
        }
        window.makeKeyAndVisible()
    }

    class func setLoginAsInitialViewContoller(window:UIWindow) {
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let loginViewController: UINavigationController = mainStoryboard.instantiateViewController(withIdentifier: "LoginNavigationViewController") as! UINavigationController

        window.rootViewController = loginViewController
        window.makeKeyAndVisible()
    }

  class func setUserDefault(_ ObjectToSave : Any?  , KeyToSave : String)
    {
        let defaults = UserDefaults.standard

        if (ObjectToSave != nil)
        {

            defaults.set(ObjectToSave, forKey: KeyToSave)
        }

        UserDefaults.standard.synchronize()
    }

    class func getUserDefault(_ KeyToReturnValye : String) -> Any?
    {
        let defaults = UserDefaults.standard

        if let name = defaults.value(forKey: KeyToReturnValye)
        {
            return name as Any
        }
        return nil
    }

    class func removetUserDefault(_ KeyToRemove : String)
    {
        let defaults = UserDefaults.standard
        defaults.removeObject(forKey: KeyToRemove)
        UserDefaults.standard.synchronize()
    }

}

그리고 당신의 AppDelegate에서는 이렇게 부릅니다.

 self.window = UIWindow(frame: UIScreen.main.bounds)
 Routing.decideInitialViewController(window: self.window!)

나는 며칠 전에 같은 상황을 만났다.아주 간단한 속임수가 이 문제를 해결했다.시작2 전에 초기 뷰 컨트롤러를 숨겼습니다.초기 뷰 컨트롤러가 올바른 컨트롤러인 경우 viewDidLoad에 표시되도록 설정됩니다.그렇지 않으면 원하는 뷰 컨트롤러에 대해 segue가 수행됩니다.iOS 6.1 이상에서 완벽하게 작동합니다.이전 버전의 iOS에서 작동한다고 확신해요.

AppDelegate에서 다음과 같이 변경해 주셔서 감사합니다.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) ->     Bool {
//Some code to check value of pins

if pins! == "Verified"{
        print(pins)
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "HomePage", bundle: nil)
        let exampleViewController: UINavigationController = mainStoryboard.instantiateViewControllerWithIdentifier("SBHP") as! UINavigationController

        self.window?.rootViewController = exampleViewController

        self.window?.makeKeyAndVisible()
    }else{
        print(pins)
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let exampleViewController: UINavigationController = mainStoryboard.instantiateViewControllerWithIdentifier("SBUser") as! UINavigationController

        self.window?.rootViewController = exampleViewController

        self.window?.makeKeyAndVisible()
    }

간단한 솔루션 발견 - 스토리보드 및 편집 프로젝트 정보 탭에서 "초기 뷰 컨트롤러 체크"를 삭제하고 사용할 필요가 없음makeKeyAndVisible, 장소만

self.window.rootViewController = rootVC;

- (BOOL) application:didFinishLaunchingWithOptions:
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = mainStoryboard.instantiateViewController(withIdentifier: "storyBoardid") as! ViewController
let navigationController = UINavigationController(rootViewController: vc)
UIApplication.shared.delegate.window?.rootViewController = navigationController

다른 방법은 viewController를 표시하는 것입니다.

let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = mainStoryboard.instantiateViewController(withIdentifier: "storyBoardid") as! ViewController
self.present(vc,animated:true,completion:nil)

먼저 스토리보드의 오브젝트를 작성한 후 루트(필요한 경우)를 변경하고 현재 뷰 컨트롤러(루트를 변경한 경우)를 푸시하고 있는 특정 뷰 컨트롤러를 참조해야 합니다.그렇지 않으면 새로운 뷰 컨트롤러가 표시됩니다.

Swift 4, Xcode 9

파일 AppDelegate.swift에 저장

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let firstVC = storyboard.instantiateViewController(withIdentifier: "firstViewController") as! firstViewController
    self.window?.rootViewController = firstVC
}
 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        self.window = UIWindow(frame: UIScreen.main.bounds)
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        if (PreferenceHelper.getAccessToken() != "") {
            let initialViewController = storyboard.instantiateViewController(withIdentifier: "your View Controller Identifier")
            self.window?.rootViewController = initialViewController
        } else {
            let initialViewController = storyboard.instantiateViewController(withIdentifier: "your View Controller identifier")
            self.window?.rootViewController = initialViewController
        }
        self.window?.makeKeyAndVisible()
        return true
    }

/*
use your view Controller identifier must use it doubles quotes**strong text**

Swift 5 이상 # 이 간단한 코드로 루트 뷰 컨트롤러를 만듭니다.xcode 11 이상을 사용하는 경우 먼저 초기화합니다.var window: UIWindow?AppDelegate에서

let rootVC = mainStoryboard.instantiateViewController(withIdentifier: "YOURCONTROLLER") as! YOURCONTROLLER

        navigationController.setNavigationBarHidden(true, animated: true)
        UIApplication.shared.windows.first?.rootViewController = UINavigationController.init(rootViewController: rootVC)
        UIApplication.shared.windows.first?.makeKeyAndVisible()

applicationDidFinish 를 변경하지 않는 경우는, 다음의 트릭을 실행할 수 있습니다.

내비게이션 컨트롤러를 초기 보기 컨트롤러로 설정하고 'MyNavigationController' 사용자 지정 클래스를 할당합니다.그런 다음 viewDidLoad 중에 루트 뷰 컨트롤러를 조정할 수 있습니다.스토리보드에서 설정한 루트 뷰 컨트롤러를 덮어씁니다.

class MyNavigationController: UINavigationController {
    override func viewDidLoad() {
        super.viewDidLoad()
        if !isLoggedIn() {
            viewControllers = [R.storyboard.authentication.loginView()!]
        }
    }

    private func isLoggedIn() -> Bool {
        return false
    }

}

Xcode 12.4 Swift 5

SGENE Delegate 재빠르다

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    guard let windowScene = (scene as? UIWindowScene) else { return }
    let window = UIWindow(windowScene: windowScene)
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    window.rootViewController = storyboard.instantiateViewController(withIdentifier: "UserViewController") as! UserViewController
    
    self.window = window
    window.makeKeyAndVisible()
}

컨트롤러 장면을 볼 수 있는 조건을 추가할 수 있습니다.

스토리보드를 사용하여 초기 View Controller 설정(메인 대신)

[스위프트 5, X코드 11]

  1. Main.storyboard-> View Controller -> Attributes Inspector -> 선택 해제Is Initial View Controller

  2. 앱 타깃 -> 일반 -> 에서 모두 삭제Main Interface

  3. 앱 위임 편집

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
    
    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        self.window = UIWindow(frame: UIScreen.main.bounds)
        
        let storyboard: UIStoryboard = UIStoryboard(name: "SomeStoryboard", bundle: nil) //SomeStoryboard  is name of .storyboard
        let viewController: ViewController = storyboard.instantiateViewController(withIdentifier: "someStoryboardId") as! ViewController //someStoryboardId is Storyboard ID

        self.window?.rootViewController = viewController
        self.window?.makeKeyAndVisible()

        return true
    }
}

다음 코드는 목표 c입니다.

다음 코드는 스토리보드 없이 커스텀 엔트리 파일을 만듭니다.

스택 오버플로에서 읽은 모든 응답에는 다음 코드가 있지만 중요한 행이 누락되어 있습니다.

MainViewController는 가장 먼저 로드하는 뷰 컨트롤러입니다.

- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
    UIWindowScene *winScreen = (UIWindowScene *)scene;
    self.window = [[UIWindow alloc] initWithWindowScene:winScreen];
    
    // Create a root view controller and set it as the root view controller of the navigation controller
    MainViewController *rootViewController = [[MainViewController alloc] init];
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
    
    // Set the navigation controller as the root view controller of the window
    [self.window setRootViewController:navigationController];
    [self.window makeKeyAndVisible];
}

여기서는 이유를 모르겠지만 각 답변이 첫 줄을 언급하지 않는다

UIWindowScene *winScreen = (UIWindowScene *)scene;

이 코드를 SceneDelegate.m 파일에 추가해야 합니다.main.storyboard 파일을 삭제할 수 있습니다.이 파일을 삭제한 후에는 info.plist에서 2개의 참조도 삭제해야 합니다.

in project configuration > Info tab > delete Main screen interface file base name
also in project configuration > Info tab > Application scene manifest > Scene configuration > Application session role > Item 0 > delete Storyboard name

삭제할 참조를 나타내는 이미지

주의: 이 방법은 현재 이 답변을 게시할 때 사용할 수 있지만, 향후 새로운 버전이 출시됨에 따라 작동하지 않을 수 있으므로 계속 업데이트하십시오.

먼저 열려는 보기 컨트롤러를 선택하고 특성 검사기로 이동하십시오.초기 장면으로 이동하여 초기 보기 컨트롤러 옵션을 확인합니다.

어플리케이션 기동시에 최초로 열리는 초기 뷰 컨트롤러가 됩니다.

언급URL : https://stackoverflow.com/questions/10428629/programmatically-set-the-initial-view-controller-using-storyboards

반응형