2015-03-01 6 views
29

Ich habe versucht, die Arbeit an meiner App programmgesteuert zu wiederholen. (Ohne die Verwendung von Storyboards)Einen navigationController programmgesteuert erstellen (Swift)

Ich bin fast fertig, außer den Navigationscontroller manuell zu machen.

Ich habe einige Nachforschungen gemacht, aber ich kann keine Dokumentation finden, um dies manuell zu implementieren. (Ich fing an, die Anwendung als Single View Application zu machen)

Derzeit habe ich nur 1 Viewcontroller. Und natürlich die AppDelegate

Der Navigationscontroller, wird auf allen Seiten in der Anwendung verwendet werden.

Wenn jemand mir helfen könnte, oder senden Sie einen Link zu einer geeigneten Dokumentation für das programmatisch zu tun, würde es sehr geschätzt werden.

EDIT:

Ich habe vergessen, es ist in Swift zu erwähnen.

+1

möglich Duplikat [Programatically UINavigationController in iOS Erstellen] (http://stackoverflow.com/questions/22981610/programatically-creating-uinavigationcontroller-in-ios) –

+0

Beachten Sie, dass in der überwiegenden Mehrheit der Fälle, Sie können es einfach auf Storyboard tun ... https://Stackoverflow.com/a/22981726/294884 Sie können dann die whacky Button-Leiste ausschalten, und es ist "genauso gut", wie es programmgesteuert. – Fattie

Antwort

55

Swift 1, 2:

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 3+:

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() 
+1

Vergiss ich, wo ich falsch gelaufen bin. Habe es wieder in mainView geändert und "var mainView = NameOfYourViewController()" getan und es hat funktioniert. Vielen Dank für die Hilfe! – MLyck

+0

Was, wenn ich es zu einer Ansicht hinzufügen möchte, hat uitabbarcontroller? – TomSawyer

+0

@TomSawyer, Bevor Sie den Controller in der Tableiste hinzufügen, erstellen Sie das UINavigationController-Objekt mit Ihrem Controller und verwenden Sie das Navigationsobjekt zum Hinzufügen von UITabbarcontroller –

0

Versuchen Sie diese. Es wird Ihnen helfen, den Navigationscontroller zu verwenden.

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

Wenn Sie dann den anderen View-Controller, einfache Verwendung folgenden Code schieben möchten zu einer anderen Ansicht-Controller zu bewegen .

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

Hey, vielen Dank für die Antwort! Ich weiß, das ist völlig meine eigene Schuld, ich habe es nur als Tag hinzugefügt und vergessen, es zu erwähnen. Aber ich schreibe es schnell. Leider habe ich keine Ahnung, wie ich diesen Code schnell umsetzen soll. – MLyck

+1

Die Antwort sollte in Swift sein –

+0

@UmairAfzal okay, ich werde Post Code für Swift sehr bald aktualisiert werden, wenn Sie es benötigt haben. –

7

Ich würde empfehlen, Ihre AppDelegate mit diesem Skelett Start:

1) Verwenden Sie lassen Sie wo immer Sie können!

2) UINavigationController hat die rootViewController Eigenschaft.

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

Vielen Dank !!! Gute Antwort !!!! – Maxim

0
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() 
} 
Verwandte Themen