web-dev-qa-db-fra.com

Créer un navigateurController par programme (Swift)

J'ai essayé de refaire le travail sur mon application par programme. (Sans l'utilisation de storyboards)

J'ai presque terminé, à part faire le contrôleur de navigation manuellement.

J'ai fait des recherches mais je ne trouve pas de documentation pour l'implémenter manuellement. (J'ai commencé à créer l'application en tant qu'application à vue unique)

Actuellement, je n'ai qu'un seul contrôleur de vue. Et bien sûr l'appDélégué

Le contrôleur de navigation sera utilisé dans toutes les pages de l’application.

Si quelqu'un pouvait m'aider ou envoyer un lien vers une documentation appropriée pour le faire par programme, ce serait grandement apprécié.

MODIFIER:

J'ai oublié de mentionner que c'est dans Swift.

45
MLyck

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+: et 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()
}
81
Jogendra.Com

Je recommanderais de démarrer votre AppDelegate avec ce squelette:

1) utilisez let partout où vous le pouvez!

2) UINavigationController a la propriété 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
}
14
telenaut

Essaye celui-là . Il vous guidera sur l'utilisation du contrôleur de navigation.

Création par programme de UINavigationController dans 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];
  }

Ensuite, lorsque vous voulez pousser l’autre contrôleur de vue, utilisez simplement le code suivant pour passer à un autre contrôleur de vue.

- (IBAction)pushMyProfileView:(id)sender
{
    self.myProfileVC = [[MyProfileViewController alloc]initWithNibName:nil bundle:nil];
    [appDelegate.navigationController pushViewController:self.myProfileVC animated:YES];
}
1
Hardik Shekhat