Creating a navigationController programmatically (Swift)

后端 未结 6 349
盖世英雄少女心
盖世英雄少女心 2020-11-29 19:21

I\'ve been trying to redo the work on my app programmatically. (Without the use of storyboards)

I\'m almost done, except making the navigation controller manually.

相关标签:
6条回答
  • 2020-11-29 19:23

    Swift 1, 2:

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
       self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
       var nav1 = UINavigationController()
       var mainView = ViewController(nibName: nil, bundle: nil) //ViewController = Name of your controller
       nav1.viewControllers = [mainView]
       self.window!.rootViewController = nav1
       self.window?.makeKeyAndVisible()
    }
    

    Swift 4+: and Swift 5+

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
       self.window = UIWindow(frame: UIScreen.main.bounds)
       let nav1 = UINavigationController()
       let mainView = ViewController(nibName: nil, bundle: nil) //ViewController = Name of your controller
       nav1.viewControllers = [mainView]
       self.window!.rootViewController = nav1
       self.window?.makeKeyAndVisible()
    }
    
    0 讨论(0)
  • 2020-11-29 19:30

    I would recommend starting your AppDelegate with this skeleton:

    1) use let wherever you can!

    2) UINavigationController has the rootViewController property.

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        let viewController = ViewController(nibName: nil, bundle: nil) //ViewController = Name of your controller
        let navigationController = UINavigationController(rootViewController: viewController)
    
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        self.window?.rootViewController = navigationController
        self.window?.makeKeyAndVisible()
    
        return true
    }
    
    0 讨论(0)
  • 2020-11-29 19:32

    Try this one . It will guide you how to use navigation controller.

    Programatically creating UINavigationController in iOS

    AppDelegate.h

        #import <UIKit/UIKit.h>
        #import "LoginViewController.h"
    
        @interface AppDelegate : UIResponder <UIApplicationDelegate>
    
        @property (strong, nonatomic) UIWindow *window;
        @property (strong,nonatomic) UINavigationController *navigationController;
        @property (strong,nonatomic) LoginViewController *loginVC;
    
        @end
    

    AppDelegate.m

        #import "AppDelegate.h"
        #import "LoginViewController.h"
    
        @implementation AppDelegate
    
      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
      {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
    
       self.loginVC = [[LoginViewController alloc]initWithNibName:nil bundle:nil];
       self.loginVC.title = @"Login Page";
    
       self.navigationController = [[UINavigationController alloc]initWithRootViewController:self.loginVC];
    
       self.window.rootViewController = self.navigationController;
       [self.window makeKeyAndVisible];
      }
    

    Then when you want to push the other view controller , simple use following code to move to another view controller.

    - (IBAction)pushMyProfileView:(id)sender
    {
        self.myProfileVC = [[MyProfileViewController alloc]initWithNibName:nil bundle:nil];
        [appDelegate.navigationController pushViewController:self.myProfileVC animated:YES];
    }
    
    0 讨论(0)
  • 2020-11-29 19:36
     self.window = UIWindow(frame: UIScreen.main.bounds) 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let storyboard_Secondary = UIStoryboard(name: "Secondary", bundle: nil) 
     var initialViewController = UIViewController() 
    
     let aUser = CommonMethods.loadCustomObject("\(Constants.kUserProfile)") as? User  
     if aUser?.respCode == 1 { 
        initialViewController = storyboard_Secondary.instantiateViewController(withIdentifier: "MainTabVC")
        UIApplication.shared.statusBarStyle = .lightContent
        let navigationController = UINavigationController(rootViewController: initialViewController)
        navigationController.isNavigationBarHidden = true
        self.window!.rootViewController = navigationController
        self.window!.makeKeyAndVisible() 
    }
    
    0 讨论(0)
  • 2020-11-29 19:37

    Value of type 'AppDelegate' has no member 'window'

    For those building newer projects with SceneDelegate.swift, you can use the 'var window: UIWindow?' in SceneDelegate instead of the removed 'var window' in AppDelegate

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = (scene as? UIWindowScene) else { return }
    
        window?.windowScene = windowScene
        window?.makeKeyAndVisible()
    
        let viewController = ViewController()
        let navViewController = UINavigationController(rootViewController: viewController)
        window?.rootViewController = navViewController
    }
    
    0 讨论(0)
  • 2020-11-29 19:41

    Here is another take in the SceneDelegate class:

    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 navController = UINavigationController()
                    let viewController = ViewController()
    
                    navController.viewControllers = [viewController]            
                    window.rootViewController = navController
                    self.window = window
                    window.makeKeyAndVisible()
            }
    }
    
    0 讨论(0)
提交回复
热议问题