sourcecode

앱 대리인에서 초기 뷰 컨트롤러 설정 - swift

codebag 2023. 7. 17. 20:58
반응형

앱 대리인에서 초기 뷰 컨트롤러 설정 - swift

앱 대리점에서 초기 뷰 컨트롤러를 설정하고 싶습니다.저는 정말 좋은 답을 찾았지만, 목표 C에 있고 동일한 것을 신속하게 달성하는 데 어려움을 겪고 있습니다.

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

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

도와줄 사람?

초기 View 컨트롤러가 조건문을 사용하여 충족되는 특정 조건에 종속되도록 합니다.

Xcode11 및 SceneDelegate 참고 사항:

에 SceneDelegates 안에서 안 될 것 AppDelegate대신 다음에서 수행합니다.SceneDelegate자세한 내용은 이 다른 답변을 참조하십시오.


이전 답변:

저는 이 스레드를 사용하여 목표 C를 신속하게 변환하는 데 도움을 주었고 완벽하게 작동합니다.

Swift에서 뷰 컨트롤러 인스턴스화 및 표시

Swift 2 코드:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    
    let initialViewController = storyboard.instantiateViewControllerWithIdentifier("LoginSignupVC")
    
    self.window?.rootViewController = initialViewController
    self.window?.makeKeyAndVisible()
    
    return true
}

스위프트 3 코드:

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

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    
    let initialViewController = storyboard.instantiateViewController(withIdentifier: "LoginSignupVC")

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

    return true
}

새로운 Xcode 11.xxx 및 Swift 5.xx의 경우 대상은 iOS 13+입니다.

새 프로젝트 구조의 경우 AppDelegate는 rootViewController와 관련된 작업을 수행할 필요가 없습니다.

창(UIWindowScene) 클래스 -> 'SceneDelegate' 파일을 처리할 새 클래스가 있습니다.

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

    if let windowScene = scene as? UIWindowScene {
        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = // Your RootViewController in here
        self.window = window
        window.makeKeyAndVisible()
    }

}

이거 먹어봐요. 예: 예:당신은 야합다니해를 사용해야 .UINavigationController초기 보기 컨트롤러로 사용할 수 있습니다.그런 다음 스토리보드에서 보기 컨트롤러를 루트로 설정할 수 있습니다.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let navigationController = storyboard.instantiateInitialViewController() as UINavigationController
    let rootViewController = storyboard.instantiateViewControllerWithIdentifier("VC") as UIViewController
    navigationController.viewControllers = [rootViewController]
    self.window?.rootViewController = navigationController
    return true
}

내 스토리보드 화면을 봅니다.

스위프트 3, 스위프트 4:

첫 번째 줄을 다음으로 변경

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool

나머지는 동일합니다.

Swift 5+:

스토리보드에서 루트 뷰 컨트롤러 인스턴스화:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // this line is important
        self.window = UIWindow(frame: UIScreen.main.bounds)

        // In project directory storyboard looks like Main.storyboard,
        // you should use only part before ".storyboard" as its name,
        // so in this example name is "Main".
        let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
        
        // controller identifier sets up in storyboard utilities
        // panel (on the right), it is called 'Storyboard ID'
        let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewControllerIdentifier") as! YourViewController

        self.window?.rootViewController = viewController
        self.window?.makeKeyAndVisible()        
        return true
    }

당신이 경우용을 사용하고 .UINavigationController루트로:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // this line is important
        self.window = UIWindow(frame: UIScreen.main.bounds)

        let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
        let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewControllerIdentifier") as! YourViewController
        let navigationController = UINavigationController.init(rootViewController: viewController)
        self.window?.rootViewController = navigationController

        self.window?.makeKeyAndVisible()        
        return true
    }

xib에서 루트 뷰 컨트롤러 인스턴스화:

거의 비슷하지만, 선 대신에

let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewControllerIdentifier") as! YourViewController

당신은 글을 써야 할 것입니다.

let viewController = YourViewController(nibName: "YourViewController", bundle: nil)

만약 당신이 스토리보드를 사용하지 않는다면, 당신은 이것을 시도할 수 있습니다.

var window: UIWindow?
var initialViewController :UIViewController?

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

    initialViewController  = MainViewController(nibName:"MainViewController",bundle:nil)

    let frame = UIScreen.mainScreen().bounds
    window = UIWindow(frame: frame)

    window!.rootViewController = initialViewController
    window!.makeKeyAndVisible()

    return true
}

Swift 4.2 및 5 코드:

var window: UIWindow?


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

     let storyboard = UIStoryboard(name: "Main", bundle: nil)

     let initialViewController = storyboard.instantiateViewController(withIdentifier: "dashboardVC")

     self.window?.rootViewController = initialViewController
     self.window?.makeKeyAndVisible()
}

리고그.Xcode 11+ and for Swift 5+:

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

     var window: UIWindow?

     func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
         if let windowScene = scene as? UIWindowScene {
             let window = UIWindow(windowScene: windowScene)

              window.rootViewController = // Your RootViewController in here

              self.window = window
              window.makeKeyAndVisible()
         }
    }
}

여기 그것에 접근하는 좋은 방법이 있습니다.이 예에서는 탐색 컨트롤러를 루트 보기 컨트롤러로 배치하고 원하는 보기 컨트롤러를 탐색 스택의 맨 아래에 배치하여 필요한 모든 항목을 푸시할 수 있도록 합니다.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
{
    // mainStoryboard
    let mainStoryboard = UIStoryboard(name: "MainStoryboard", bundle: nil)

    // rootViewController
    let rootViewController = mainStoryboard.instantiateViewControllerWithIdentifier("MainViewController") as? UIViewController

    // navigationController
    let navigationController = UINavigationController(rootViewController: rootViewController!)

    navigationController.navigationBarHidden = true // or not, your choice.

    // self.window
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

    self.window!.rootViewController = navigationController

    self.window!.makeKeyAndVisible()
}

이 예제를 사용하려면 기본 보기 컨트롤러에서 "MainViewController"를 Storyboard ID로 설정하고 이 경우 스토리보드의 파일 이름은 "MainStoryboard.storyboard"가 됩니다.메인 스토리보드가 나에게 적합한 이름이 아니기 때문에 나는 내 스토리보드의 이름을 이렇게 바꿉니다. 특히 만약 당신이 그것을 하위 클래스에 간다면 말입니다.

저는 오브젝티브-C에서 그것을 했습니다.저는 그것이 당신에게 유용하기를 바랍니다.

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

UIViewController *viewController;

NSUserDefaults *loginUserDefaults = [NSUserDefaults standardUserDefaults];
NSString *check=[loginUserDefaults objectForKey:@"Checklog"];

if ([check isEqualToString:@"login"]) {
    
    viewController = [storyboard instantiateViewControllerWithIdentifier:@"SWRevealViewController"];
} else {
    
    viewController = [storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"];
}


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

AppDelegate에서 Init ViewController

[초기 보기 컨트롤러]

사용 안 함Main.storyboard

General -> Deployment Info -> Main Interface -> remove `Main` 
Info.plist -> remove Key/Value for `UISceneStoryboardFile` and `UIMainStoryboardFile`

스토리보드 ID 추가

Main.storyboard -> Select View Controller -> Inspectors -> Identity inspector -> Storyboard ID -> e.g. customVCStoryboardId

[협조]
스위프트 5 및 Xcode 11

확장하다UIWindow

class CustomWindow : UIWindow {
    //...
}

Xcode에서 생성한 편집SceneDelegate.swift

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: CustomWindow!

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        
        guard let windowScene = (scene as? UIWindowScene) else { return }

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let initialViewController = storyboard.instantiateViewController(withIdentifier: "customVCStoryboardId")

        //or if your storyboard has `Is Initial View Controller`
        let storyboard = UIStoryboard(name: String(describing: SomeViewController.self), bundle: nil)
        let initialViewController = storyboard.instantiateInitialViewController()

        window = CustomWindow(windowScene: windowScene)
        window.rootViewController = initialViewController
        window.makeKeyAndVisible()
    }

    //...
}

[Framework 번들 액세스]
[프레임워크에서 스토리보드 가져오기]

스토리보드를 사용하지 않는 경우.기본 보기 컨트롤러를 프로그래밍 방식으로 초기화할 수 있습니다.

스위프트 4

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    let rootViewController = MainViewController()
    let navigationController = UINavigationController(rootViewController: rootViewController)
    self.window = UIWindow(frame: UIScreen.main.bounds)
    self.window?.rootViewController = navigationController
    self.window?.makeKeyAndVisible()

    return true
}
class MainViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .green
    }
}

또한 제거합니다.Main배포 정보에서.

enter image description here

나는 Xcode 8에서 했고 swift 3.0은 당신에게 유용하고 완벽하게 작동하기를 바랍니다.다음 코드를 사용합니다.

var window: UIWindow?

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

탐색 컨트롤러를 사용하는 경우 다음 코드를 사용합니다.

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.main.bounds)
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let navigationController:UINavigationController = storyboard.instantiateInitialViewController() as! UINavigationController
    let initialViewController = storyboard.instantiateViewControllerWithIdentifier("ViewController")
    navigationController.viewControllers = [initialViewController]
    self.window?.rootViewController = navigationController
    self.window?.makeKeyAndVisible()      
    return true
}

스위프트 4:

다음 행을 AppDelegate.swift의 didDidLaunchingWithOptions() 함수 안에 추가합니다.

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    // Setting the Appropriate initialViewController

    // Set the window to the dimensions of the device
    self.window = UIWindow(frame: UIScreen.main.bounds)

    // Grab a reference to whichever storyboard you have the ViewController within
    let storyboard = UIStoryboard(name: "Name of Storyboard", bundle: nil)

    // Grab a reference to the ViewController you want to show 1st.
    let initialViewController = storyboard.instantiateViewController(withIdentifier: "Name of ViewController")

    // Set that ViewController as the rootViewController
    self.window?.rootViewController = initialViewController

    // Sets our window up in front
    self.window?.makeKeyAndVisible()

    return true
}

예를 들어 사용자를 로그인 화면이나 초기 설정 화면으로 이동하거나 앱의 기본 화면으로 되돌리는 등의 작업을 수행하는 경우가 많습니다.만약 여러분도 그런 일을 하고 싶다면, 이 점을 갈림길로 삼을 수 있습니다.

생각해 보세요.예를 들어 userLogged를 보유한 NSUserDefaults에 값을 저장할 수 있습니다.부울 및if userLoggedIn == false { use this storyboard & initialViewController... } else { use this storyboard & initialViewController... }

위/아래의 모든 답변은 스토리보드에 진입점이 없다는 경고를 생성합니다.

조건(예: conditionVariable)에 따라 2개 이상의 엔트리 뷰 컨트롤러를 사용하려면 다음을 수행해야 합니다.

  • 메인 스토리보드에서 rootViewController 없이 UINavigationController를 생성하고 진입점으로 설정합니다.
  • 뷰 컨트롤러에 2개 이상의 "Show" 세그먼트를 생성하고 일부 ID(: id1 id2)를 할당합니다.
  • 다음 코드 사용:

    class AppDelegate: UIResponder, UIApplicationDelegate {
    
       var window: UIWindow?
    
       func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
           let navigationController = window!.rootViewController! as! UINavigationController
           navigationController.performSegueWithIdentifier(conditionVariable ? "id1" : "id2")
    
           return true
       }
    

이게 도움이 되길 바랍니다.

Swift 4의 완전한 솔루션은 다음과 같습니다. diddidFinishLaunchingWithOptions에서 이를 구현합니다.

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

 let isLogin = UserDefaults.standard.bool(forKey: "Islogin")
    if isLogin{
        self.NextViewController(storybordid: "OtherViewController")


    }else{
        self.NextViewController(storybordid: "LoginViewController")

    }
}

이 함수를 Appdelegate.swift 내부의 아무 곳에나 씁니다.

  func NextViewController(storybordid:String)
{

    let storyBoard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let exampleVC = storyBoard.instantiateViewController(withIdentifier:storybordid )
   // self.present(exampleVC, animated: true)
    self.window = UIWindow(frame: UIScreen.main.bounds)
    self.window?.rootViewController = exampleVC
    self.window?.makeKeyAndVisible()
}

앱 대리인이 아닌 뷰 컨트롤러에서 수행하려는 경우:보기 컨트롤러에서 AppDelegate에 대한 참조를 가져와서 오른쪽 보기 컨트롤러를 루트 보기 컨트롤러로 사용하여 해당 창 개체를 재설정하기만 하면 됩니다.

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.window = UIWindow(frame: UIScreen.mainScreen().bounds)
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let yourVC = mainStoryboard.instantiateViewControllerWithIdentifier("YOUR_VC_IDENTIFIER") as! YourViewController
appDelegate.window?.rootViewController = yourVC
appDelegate.window?.makeKeyAndVisible()

빠른 4.0을 위하여.

AppDelegate.swift 파일 WithOptions 메서드의 실행을 마쳤습니다. 다음 코드를 입력하십시오.

var window: UIWindow?


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

    let rootVC = MainViewController() // your custom viewController. You can instantiate using nib too. UIViewController(nib name, bundle)
    //let rootVC = UIViewController(nibName: "MainViewController", bundle: nil) //or MainViewController()
    let navController = UINavigationController(rootViewController: rootVC) // Integrate navigation controller programmatically if you want

    window?.rootViewController = navController

    return true
}

잘 되길 바랍니다.

스위프트 5 & X 코드 11

따라서 xCode 11에서는 윈도우 솔루션이 appDelegate 내부에서 더 이상 유효하지 않습니다.그들은 이것을 장면 삼각주로 옮겼습니다.SceneDelgate.swift 파일에서 확인할 수 있습니다.

이제 다음이 있다는 것을 알게 될 것입니다.var window: UIWindow?현재의.

이 상황에서 스토리보드의 TabBar 컨트롤러를 사용하고 있었는데 이 컨트롤러를 rootView 컨트롤러로 설정하려고 했습니다.

내 코드는 다음과 같습니다.

장면 대표단.swift

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

        self.window = self.window ?? UIWindow()//@JA- If this scene's self.window is nil then set a new UIWindow object to it.

        //@Grab the storyboard and ensure that the tab bar controller is reinstantiated with the details below.
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let tabBarController = storyboard.instantiateViewController(withIdentifier: "tabBarController") as! UITabBarController

        for child in tabBarController.viewControllers ?? [] {
            if let top = child as? StateControllerProtocol {
                print("State Controller Passed To:")
                print(child.title!)
                top.setState(state: stateController)
            }
        }

        self.window!.rootViewController = tabBarController //Set the rootViewController to our modified version with the StateController instances
        self.window!.makeKeyAndVisible()

        print("Finished scene setting code")
        guard let _ = (scene as? UIWindowScene) else { return }
    }

제가 여기서 했던 것처럼 이것을 올바른 장면 방법에 추가해야 합니다.스토리보드에서 사용 중인 tabBarController 또는 viewController에 대한 식별자 이름을 설정해야 합니다.

how to set the storyboard ID

제 경우에는 탭 보기 간에 공유 변수를 추적할 상태 컨트롤러를 설정하기 위해 이 작업을 수행했습니다.동일한 작업을 수행하려면 다음 코드를 추가하십시오.

상태 컨트롤러.swift

import Foundation

struct tdfvars{
    var rbe:Double = 1.4
    var t1half:Double = 1.5
    var alphaBetaLate:Double = 3.0
    var alphaBetaAcute:Double = 10.0
    var totalDose:Double = 6000.00
    var dosePerFraction:Double = 200.0
    var numOfFractions:Double = 30
    var totalTime:Double = 168
    var ldrDose:Double = 8500.0
}

//@JA - Protocol that view controllers should have that defines that it should have a function to setState
protocol StateControllerProtocol {
  func setState(state: StateController)
}

class StateController {
    var tdfvariables:tdfvars = tdfvars()
}

참고: 당신 자신의 변수나 당신이 추적하려는 것을 대신 사용하세요, 저는 단지 tdf 변수 구조의 예로 제 것을 나열했습니다.

TabController의 각 보기에서 다음 멤버 변수를 추가합니다.

    class SettingsViewController: UIViewController {
    var stateController: StateController?
.... }

그런 다음 동일한 파일에 다음을 추가합니다.

extension SettingsViewController: StateControllerProtocol {
  func setState(state: StateController) {
    self.stateController = state
  }
}

이렇게 하면 뷰 간에 변수를 전달하는 단일 방식을 피할있습니다.따라서 싱글톤 접근법보다 훨씬 장기적으로 훨씬 더 나은 의존성 주입 모델을 쉽게 사용할 수 있습니다.

Swift 5.3 + 및 iOS 13.0 +

"SceneDelegate.swift"에서 초기 ViewController 설정 // Only

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    
    var window: UIWindow?
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = (scene as? UIWindowScene) else { return }
        window = UIWindow(windowScene: windowScene)
        setInitialViewController()
        window?.makeKeyAndVisible()
    }
    
    func setInitialViewController()  {
        
        // Set Story board Controller
        /*
         let storyboard = UIStoryboard(name: "Main", bundle: nil)
         let vc = storyboard.instantiateViewController(withIdentifier: "ViewController")
         */
        
        // Set Custom Xib
        let vc = FrontVC(nibName: "FrontViewController", bundle: nil)
        
        // Navigation Controller
        let nav = UINavigationController(rootViewController: vc)
        nav.isNavigationBarHidden = true
        window?.rootViewController = nav
    }

iOS 13+

(scene) 딜러:

var window: UIWindow?

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options 
connectionOptions: UIScene.ConnectionOptions) {
    guard let windowScene = (scene as? UIWindowScene) else { return }
    window = UIWindow(windowScene: windowScene)
    let vc = UIViewController() //Instead of UIViewController() we initilise our initial viewController
    window?.rootViewController = vc
    window?.makeKeyAndVisible()
}
I worked out a solution on Xcode 6.4 in swift. 

// I saved the credentials on a click event to phone memory

    @IBAction func gotobidderpage(sender: AnyObject) {
 if (usernamestring == "bidder" && passwordstring == "day303")
        {
            rolltype = "1"

NSUserDefaults.standardUserDefaults().setObject(usernamestring, forKey: "username")
NSUserDefaults.standardUserDefaults().setObject(passwordstring, forKey: "password")
NSUserDefaults.standardUserDefaults().setObject(rolltype, forKey: "roll")


            self.performSegueWithIdentifier("seguetobidderpage", sender: self)
}


// Retained saved credentials in app delegate.swift and performed navigation after condition check


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

let usernamestring = NSUserDefaults.standardUserDefaults().stringForKey("username")
let passwordstring = NSUserDefaults.standardUserDefaults().stringForKey("password")
let rolltypestring = NSUserDefaults.standardUserDefaults().stringForKey("roll")

        if (usernamestring == "bidder" && passwordstring == "day303" && rolltypestring == "1")
        {

            // Access the storyboard and fetch an instance of the view controller
            var storyboard = UIStoryboard(name: "Main", bundle: nil)
            var viewController: BidderPage = storyboard.instantiateViewControllerWithIdentifier("bidderpageID") as! BidderPage

            // Then push that view controller onto the navigation stack
            var rootViewController = self.window!.rootViewController as! UINavigationController
            rootViewController.pushViewController(viewController, animated: true)
        }

        // Override point for customization after application launch.
        return true
    }



Hope it helps !
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
}

앱에서 SWRevealViewController From App 대리자를 사용하여 보기 컨트롤러를 엽니다.

 self.window = UIWindow(frame: UIScreen.main.bounds)
 let storyboard = UIStoryboard(name: "StoryboardName", bundle: nil)
 let swrevealviewcontroller:SWRevealViewController = storyboard.instantiateInitialViewController() as! SWRevealViewController 
 self.window?.rootViewController = swrevealviewcontroller
 self.window?.makeKeyAndVisible()

스위프트 5+용


var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            let submodules = (
                home: HomeRouter.createModule(),
                search: SearchRouter.createModule(),
                exoplanets: ExoplanetsRouter.createModule()
            )
            
            let tabBarController = TabBarModuleBuilder.build(usingSubmodules: submodules)
            
            window.rootViewController = tabBarController
            self.window = window
            window.makeKeyAndVisible()
        }
    }

나는 이 대답이 도움이 되고 내 앱 사용자가 이미 키 체인이나 사용자 기본값에 존재하는 경우 루트 뷰 컨트롤러를 변경해야 할 때 완벽하게 작동한다는 것을 알게 되었습니다.

https://stackoverflow.com/a/58413582/6596443

언급URL : https://stackoverflow.com/questions/26753925/set-initial-viewcontroller-in-appdelegate-swift

반응형