[英]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
}
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.