简体   繁体   English

以编程方式创建一个 navigationController (Swift)

[英]Creating a navigationController programmatically (Swift)

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.我几乎完成了,除了手动导航 controller。

I've been doing some research but I can't find any documentation of implementing this manually.我一直在做一些研究,但我找不到任何手动实现它的文档。 (I started making the app as a Single View Application) (我开始将应用程序制作为单一视图应用程序)

Currently, I only have 1 viewcontroller.目前,我只有 1 个视图控制器。 And of course the appDelegate当然还有 appDelegate

The navigation Controller, will be used throughout all pages in the application.导航 Controller 将在应用程序的所有页面中使用。

If anyone could help me out, or send a link to some proper documentation for doing this programmatically it would be greatly appreciated.如果有人可以帮助我,或者发送指向一些适当文档的链接以编程方式执行此操作,将不胜感激。

EDIT:编辑:

I forgot to mention it's in Swift.我忘了提到它在 Swift 中。

Swift 1, 2:斯威夫特 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+ Swift 4+:和 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()
}

I would recommend starting your AppDelegate with this skeleton:我建议用这个骨架启动你的 AppDelegate:

1) use let wherever you can! 1) 尽可能使用let

2) UINavigationController has the rootViewController property. 2) UINavigationController 具有rootViewController属性。

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
}

Value of type 'AppDelegate' has no member 'window' “AppDelegate”类型的值没有成员“window”

For those building newer projects with SceneDelegate.swift, you can use the 'var window: UIWindow?'对于那些使用 SceneDelegate.swift 构建新项目的人,您可以使用“var window: UIWindow?” in SceneDelegate instead of the removed 'var window' in AppDelegate在 SceneDelegate 中而不是在 AppDelegate 中删除的“var window”

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
}

Try this one .试试这个。 It will guide you how to use navigation controller.它将指导您如何使用导航控制器。

Programatically creating UINavigationController in iOS 在 iOS 中以编程方式创建 UINavigationController

AppDelegate.h 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 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];
}

Here is another take in the SceneDelegate class:这是 SceneDelegate 类的另一个例子:

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

It is probably overkill, but I find myself doing this often enough that I just extended UIViewController and created an embedInNavigationController method.这可能是矫枉过正,但我发现自己经常这样做,以至于我只是扩展了 UIViewController 并创建了一个 embedInNavigationController 方法。 So now I can just call viewController.embedInNavigationController.所以现在我可以调用 viewController.embedInNavigationController。

extension UIViewController {

func embedInNavigationController() -> UINavigationController {
    return UINavigationController(rootViewController: self)
   }
}
 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() 
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 快速地以编程方式创建NavigationController时,ViewController出现了多次 - ViewController appears mulitple times when creating a navigationController programmatically in swift 以编程方式呈现后,Swift中的NavigationController为零 - NavigationController is nil in Swift after Presenting Programmatically 在SWIFT 2.x中以NavigationController编程方式调用UIViewController - Call a UIViewController with NavigationController programmatically in SWIFT 2.x 以编程方式将NavigationController添加到指定viewController中,而无需故事板快速 - Add navigationController to specif viewController programmatically without storyboard swift 在Swift中以编程方式创建webView - Creating webViews programmatically in Swift 在Swift中以编程方式创建UITableViewCell - Creating a UITableViewCell programmatically in Swift 以编程方式在swift中加载创建uitableview - creating uitableview programmatically in swift not loading 通过NavigationController-TabBarController-NavigationController以编程方式导航 - Navigate programmatically through NavigationController-TabBarController-NavigationController NavigationController中的Swift ImagePicker - Swift ImagePicker inside NavigationController navigationController popToViewController 在 swift 3 中不起作用 - navigationController popToViewController not working in swift 3
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM