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


252

프로그래밍 방식 InitialViewController으로 스토리 보드를 설정하려면 어떻게합니까 ? 실행에 따라 다를 수있는 조건에 따라 스토리 보드를 다른보기로 열고 싶습니다.


1
설정에서 메인 스토리 보드를 지우지 않고 경고없이이 답변 을 확인하십시오 .
Borzh

답변:


466

더미 초기 뷰 컨트롤러 없이 하는 방법

모든 초기보기 컨트롤러에 스토리 보드 ID가 있는지 확인하십시오.

스토리 보드의 첫 번째보기 컨트롤러에서 "초기보기 컨트롤러입니다"속성을 선택 취소하십시오.

이 시점에서 앱을 실행하면 다음을 읽습니다.

Failed to instantiate the default view controller for UIMainStoryboardFile 'MainStoryboard' - perhaps the designated entry point is not set?

그리고 앱 델리게이트의 창 속성이 이제 없음을 알 수 있습니다.

앱 설정에서 대상 및 Info탭으로 이동 하십시오. 의 값을 지 웁니다 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;
}

7
사랑! 사랑! 사랑! 이를 사용하여 IOS6 및 IOS7에 대해 완전히 다른 두 개의 뷰 컨트롤러 트리 간을 전환합니다. IOS7의 모든 종과 휘파람을 계속 사용하면서 역방향 호환성을 처리하는 가장 좋은 방법 인 것 같습니다.
Hunkpapa

6
Swift에서 iOS 프로그래밍을 배우고 있습니다. 누구나 위의 코드를 신속하게 작성하는 방법을 알려줄 수 있습니까? 도와주세요. 감사.
Raghavendra

1
@bdv didFinishLaunchingWithOptions는 앱이 새로운 프로세스에서 시작될 때 호출됩니다. 홈 화면으로 이동하여 앱으로 돌아 가면이 메소드가 다시 호출되지 않습니다. (메모리 제한으로 인해 iOS가 종료되지 않는 한) 앱을 중지하고 IDE에서 다시 시작하십시오. 문제가 계속되면 문제를 SO에 게시하면 기꺼이 도와 드리겠습니다.
트래비스

2
@peyman 내 조사에 따르면 메인 스토리 보드에 대한 참조가 제거되면 창이 존재하지 않습니다. 현재 프로젝트에서 창 인스턴스화를 주석 처리했으며 여전히 그렇습니다.
Travis

2
@ Raghav, 신속한 코드는 다음과 같습니다.self.window = UIWindow(frame: UIScreen.mainScreen().bounds) var storyboard = UIStoryboard(name: "Main", bundle: nil) var viewController: UIViewController = // self.window!.rootViewController = viewController self.window!.makeKeyAndVisible()
mjmayank

121

모든 Swift 애호가를위한 @Travis 의 답변은 SWIFT 로 번역되었습니다 .

@Travis 가 Objective C 코드 전에 설명한 것을 수행 하십시오. 그때,

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. 새 창을 보이게

즐거운 프로그래밍을 즐기십시오!


나는이 버전에 대한 @Travis를 요청했다. 그리고 .... 아무튼 고마워
dellos

스토리 보드 ID는 신원 관리자 창에서 신원 섹션 아래에 있습니다
Dominic

2
스토리 보드 ID가 필요하지 않은 팁은 스토리 보드에서 초기보기 컨트롤러 (rootViewController)를 명시 적으로 설정하고 인스턴스 메소드 UIStoryboard.instantiateInitialViewController ()를 사용하여 위에서 제안한 UIStoryboard.instantiateViewControllerWithIdentifier () 대신 컨트롤러를 가져 오는 것입니다. 나머지는 동일합니다.
Eric Boumendil 16:29에

45

프로그래밍 방식으로 키 창의 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;
}

그런 다음 보조 UIViewController에서 원래 진입 점을 시작하는 방법은 무엇입니까?
ooxio

@ooxio : 원래 진입 점을 전역 위치에 저장 한 다음 나중에 사용할 수 있습니다.
Chengjiong

이것은 로그인 / 등록 또는 이와 유사한 것을 인스턴스화하고 싶을 때 정말 유용합니다 ...
Honey

IB에서 백만 개의 프로젝트 설정을 엉망으로 만들 필요가 없기 때문에 위의 @Travis의 대답보다 훨씬 간단합니다. 뷰 컨트롤러 중 하나가 기술적으로 기본 초기 VC인지 프로그래밍하고 다른 프로그래밍 방식으로 다른 것을 전환하는 사람은 누구입니까?
Danny

교체되고 스토리 보드로 지정된 초기 View Controller는 인스턴스화되어 init()/ deinit()사이클을 거치지 만 -s를 viewDidLoad()제대로 실행 하거나 초기화 하지 않습니다 IBOutlet. 코드가 준비되었는지 확인하십시오.
Gary

14

스위프트 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
}

@MEK 감사합니다. 또한 후행 괄호를 중괄호로 바꾸어 조건부 닫기 명령문의 구문을 정정 할 수 있습니다.
Native_Mobile_Arch_Dev 2019

9

Navigation rootviewcontroller를 기본보기 컨트롤러로 설정할 수 있습니다. 이 아이디어는 응용 프로그램 요구 사항에 따라 자동 로그인에 사용할 수 있습니다.

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];
}

감사


6

메인 스토리 보드를 열고 먼저 시작하려는보기를 선택한 다음 유틸리티-> 속성을 ​​엽니 다. "View Controller"아래에 "Initial View Controller"라디오 버튼이 있습니다. 그냥 선택하십시오.

--- 수정 된 질문 :

시도해 볼 수 있습니다 : 초기보기의 ViewDidLoad 섹션에 메소드를 작성하고 응용 프로그램이 실행될 때 메소드가 실행될 때 메소드는 다른보기에 대한 segue를 트리거합니다.


ViewDidLoad에 메소드를 작성했지만 작동하지 않으며 viewdidApp에서 라이트 처리 할 때 작동하는 이유를 설명 할 수 있습니까?
UserDev

appDelegate.m 파일의 적절한 메소드 중 하나에 조건에 따라 segue 코드를 추가하십시오. 예를 들어, "applicationDidBecomeActive :"메소드에 segue 코드를 추가 할 수 있습니다.
m.etka

@Jagdev 당신은 ViewDidLoad 대신 ViewDidAppear에 씁니다.
Umair Khan Jadoon

이 접근 방식의 문제점은 초기 뷰 컨트롤러가 일정 시간 동안 표시된 다음 UX 관점에서 좋지 않은 다른 스위치로 전환되므로 좋은 솔루션이 아닙니다.
vishal dharankar

3

스위프트 5

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

  1. 프로젝트 대상으로 이동하여 프로젝트-> 일반-> 기본 인터페이스 필드 지우기를 선택하십시오.
  2. 항상 프로젝트 대상 내에서 이제 정보-> 응용 프로그램 장면 매니페스트-> 장면 구성-> 응용 프로그램 세션 역할-> 항목 0 (기본 구성)-> 스토리 보드 이름 필드 삭제로 이동하십시오.

마지막으로 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()

}

이것은 Xcode 11.5 현재 가장 최신 답변이며 실제로 Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set코드에서 초기 VC를 인스턴스화하기로 결정한 후 발생 하는 경고를 수정 했습니다. 중요한 점은 @ rs7이 "스토리 보드 이름 필드 삭제"라고 할 때 필드 자체의 내용뿐만 아니라 plist의 전체 행을 의미합니다.
cdf1982

2

나는 그것이 가능하지 않다고 생각합니다. 대신 하나의 초기 컨트롤러를 사용하여 다른 뷰 컨트롤러에 연결될 수 있습니다. 시작할 때 프로그래밍 방식으로 수행 할 segue를 결정할 수 있습니다.


2

initial view controller프로그래밍 방식으로뿐만 아니라 Interface Builder를 사용하여 설정할 수 있습니다 .

아래는 프로그래밍 방식으로 사용되는 방법입니다.

목표 -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

2

동적 탐색을 처리하고 깨끗한 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

힘 주조를 피하면서 Swift 3Swift 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
}

2

에서 AppDelegate.swift당신에 다음 코드를 추가 할 수 있습니다 :

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

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

또한 ID를 추가하는 것을 잊지 마십시오 (스토리 보드-> 컨트롤러 장면-> ID 관리자 표시-> StorboardID 지정).


1

iOS 13 및 장면 델리게이트에 대한 업데이트 된 답변 :

info.plist 파일에서 Application Scene Manifest-> Scene Configuration-> Application Session Role-> Item 0으로 이동하여 기본 스토리 보드에 대한 참조를 삭제하십시오. 그렇지 않으면 스토리 보드에서 인스턴스화 실패에 대해 동일한 경고가 표시됩니다.

또한 코드가 앱 델리게이트에서 씬 델리게이트 메소드 scene (_ : willConnectTo : options :)으로 이동하십시오. 이제 라이프 사이클 이벤트가 처리됩니다.


0

며칠 전에 나는 같은 상황에 직면했습니다. 매우 간단한 트릭으로이 문제를 해결했습니다. launch2 전에 초기 뷰 컨트롤러를 숨겼습니다. 초기보기 컨트롤러가 올바른 컨트롤러 인 경우 viewDidLoad에 표시되도록 설정되어 있습니다. 그렇지 않으면, 원하는 뷰 컨트롤러에 segue가 수행됩니다. iOS 6.1 이상에서 완벽하게 작동합니다. 이전 버전의 iOS에서 작동한다고 확신합니다.


0

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()
    }

0

찾을 간단한 솔루션 - 스토리 보드 및 프로젝트 정보 탭 및 사용을 편집에서 "초기 뷰 컨트롤러 검사"를 제거 할 필요없이 makeKeyAndVisible, 단지 장소

self.window.rootViewController = rootVC;

- (BOOL) application:didFinishLaunchingWithOptions:

하지만 당신은 여전히 얻을 rootVC에서 instantiateViewControllerWithIdentifier올바른?
thomers

0
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)

먼저 스토리 보드의 객체를 생성 한 다음 루트를 변경해야합니다 (필요한 경우). 그런 다음 현재 뷰 컨트롤러를 푸시 한 특정 뷰 컨트롤러를 참조하십시오 (루트를 변경하면) 그렇지 않으면 새로운 뷰 컨트롤러가 나타납니다.


@VD Purohit, 더 많은 이해를 위해 귀하의 답변에 대해 더 자세히 설명해 주시겠습니까?
Prags December

0

스위프트 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
}

0
 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**

nsuser에서 확인 기본값 값 기본 설정 값 완전히 저장 및 초기보기에서 조건 확인 컨트롤러 문제
charles

0

스위프트 5 이상은 이 간단한 코드로 라우트 뷰 컨트롤러를 만듭니다. var window: UIWindow?AppDelegate에서 xcode 11 이상을 처음 사용하는 경우

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()

0

applicationDidFinish를 변경하지 않으려면 다음 트릭을 수행하십시오.

탐색 컨트롤러를 초기보기 컨트롤러로 설정하고 사용자 정의 클래스 'MyNavigationController'를 지정하십시오. 그런 다음 viewDidLoad 중에 루트 뷰 컨트롤러를 조정할 수 있습니다. 스토리 보드에서 설정 한 루트 뷰 컨트롤러보다 우선합니다.

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

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

}

-3

먼저 열려는 뷰 컨트롤러를 선택하고 속성 관리자로 이동하십시오. 초기 장면으로 이동하여 초기보기 컨트롤러 옵션인지 확인하십시오.

이제 이것은 애플리케이션을 시작할 때 처음 열리는 초기 뷰 컨트롤러가됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.