Agregar la barra de navegación programáticamente iOS

Estoy tratando de hacer una aplicación con una barra de navegación (botón Atrás, título, etc.) y una barra de tabs (barra de herramientas en la parte inferior). Estoy usando subvistas, así que no tengo que preocuparme por la barra de estado, la barra de navegación, las alturas de la barra de tabs, etc. Pero creo que me está causando problemas porque parece que no puedo encontrar la manera de configurar las barras Nav y Tab .

Esto es lo que tengo. ¿Qué estoy haciendo mal?

AppDelegate.h

(default for single view app) 

AppDelegate.m

 (default for single view app) 

ViewController.h

 #import  @interface ViewController : UIViewController @property (strong, nonatomic) UIView *contentSubview; @end 

ViewController.m

 #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)loadView{} - (void)viewDidLoad { [super viewDidLoad]; UIView *view = [[UIView alloc] init]; view.backgroundColor = [UIColor greenColor]; self.contentSubview = [[UIView alloc] init]; self.contentSubview.backgroundColor = [UIColor orangeColor]; [view addSubview:self.contentSubview]; self.view = view; } - (void)viewWillLayoutSubviews { [super viewWillLayoutSubviews]; self.contentSubview.frame = CGRectMake( 0, self.topLayoutGuide.length, CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame)-self.topLayoutGuide.length-self.bottomLayoutGuide.length ); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end 

 -(void)ViewDidLoad { UINavigationBar* navbar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 50)]; UINavigationItem* navItem = [[UINavigationItem alloc] initWithTitle:@"karthik"]; // [navbar setBarTintColor:[UIColor lightGrayColor]]; UIBarButtonItem* cancelBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(onTapCancel:)]; navItem.leftBarButtonItem = cancelBtn; UIBarButtonItem* doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(onTapDone:)]; navItem.rightBarButtonItem = doneBtn; [navbar setItems:@[navItem]]; [self.view addSubview:navbar]; } -(void)onTapDone:(UIBarButtonItem*)item{ } -(void)onTapCancel:(UIBarButtonItem*)item{ } 

Swift3

 let navigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height:44)) // Offset by 20 pixels vertically to take the status bar into account navigationBar.backgroundColor = UIColor.white // Create a navigation item with a title let navigationItem = UINavigationItem() navigationItem.title = "Title" // Create left and right button for navigation item let leftButton = UIBarButtonItem(title: "Save", style: .plain, target: self, action: #selector(ViewController.btn_clicked(_:))) let rightButton = UIBarButtonItem(title: "Right", style: .plain, target: self, action: nil) // Create two buttons for the navigation item navigationItem.leftBarButtonItem = leftButton navigationItem.rightBarButtonItem = rightButton // Assign the navigation item to the navigation bar navigationBar.items = [navigationItem] // Make the navigation bar a subview of the current view controller self.view.addSubview(navigationBar) func btn_clicked(_ sender: UIBarButtonItem) { // Do something } 

Rápido

  // Create the navigation bar let navigationBar = UINavigationBar(frame: CGRectMake(0, 0, self.view.frame.size.width, 44)) // Offset by 20 pixels vertically to take the status bar into account navigationBar.backgroundColor = UIColor.whiteColor() navigationBar.delegate = self; // Create a navigation item with a title let navigationItem = UINavigationItem() navigationItem.title = "Title" // Create left and right button for navigation item let leftButton = UIBarButtonItem(title: "Save", style: UIBarButtonItemStyle.Plain, target: self, action: "btn_clicked:") let rightButton = UIBarButtonItem(title: "Right", style: UIBarButtonItemStyle.Plain, target: self, action: nil) // Create two buttons for the navigation item navigationItem.leftBarButtonItem = leftButton navigationItem.rightBarButtonItem = rightButton // Assign the navigation item to the navigation bar navigationBar.items = [navigationItem] // Make the navigation bar a subview of the current view controller self.view.addSubview(navigationBar) func btn_clicked(sender: UIBarButtonItem) { // Do something } 

método xib:

tutorial desde aquí

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Create the PlainViewController (and give it a title) PlainViewController *plainView = [[PlainViewController alloc] initWithNibName:@"PlainViewController" bundle:nil]; [plainView setTitle:@"PlainView"]; // Create the NavRootView controller (and give it a title) NavRootView *navRoot = [[NavRootView alloc] initWithNibName:@"NavRootView" bundle:nil]; [navRoot setTitle:@"NavRoot"]; // Create our navigation controller using our NavRootView as it's root view UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:navRoot]; // Make an array containing our plain view controller and our navigation controller NSArray *viewArray = [NSArray arrayWithObjects:plainView, navController, nil]; // Release the views and nav controller [plainView release]; [navRoot release]; [navController release]; // Create our tab bar controller UITabBarController *tabbarController = [[UITabBarController alloc] init]; // Tell the tab bar controller to use our array of views [tabbarController setViewControllers:viewArray]; // Finally, add the tabbar controller as a subview of the app window [window addSubview:[tabbarController view]]; [self.window makeKeyAndVisible]; return YES; } 

solo código:

howto-implementation-uinavigationcontroller-uitabbarcontroller-programmatically

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { /* Initialize window view */ self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; /* Initialize tab bar controller, add tabs controllers */ self.tabBarController = [[UITabBarController alloc] init]; self.tabBarController.viewControllers = [self initializeTabBarItems]; self.window.rootViewController = self.tabBarController; [self.window makeKeyAndVisible]; return (YES); } - (NSArray *)initializeTabBarItems { NSArray * retval; /* Initialize view controllers */ ViewController1 * viewController1 = [[ViewController1 alloc] init]; ViewController2 * viewController2 = [[ViewController2 alloc] init]; ViewController3 * viewController3 = [[ViewController3 alloc] init]; ViewController4 * viewController4 = [[ViewController4 alloc] init]; ViewController5 * viewController5 = [[ViewController5 alloc] init]; /* Initialize navigation controllers */ UINavigationController * navigationController1 = [[UINavigationController alloc] initWithRootViewController:viewController1]; UINavigationController * navigationController2 = [[UINavigationController alloc] initWithRootViewController:viewController2]; UINavigationController * navigationController3 = [[UINavigationController alloc] initWithRootViewController:viewController3]; UINavigationController * navigationController4 = [[UINavigationController alloc] initWithRootViewController:viewController4]; UINavigationController * navigationController5 = [[UINavigationController alloc] initWithRootViewController:viewController5]; /* Stuff Navigation Controllers into return value */ retval = [NSArray arrayWithObjects:viewController1,viewController2,viewController3,viewController4,viewController5,nil]; return (retval); } 

guión gráfico:

storyboards-tutorial-en-ios-7

enter image description here

Versión Swift, agregue esto en viewDidLoad:

 var doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "doneButton:") navigationItem.rightBarButtonItem = doneButton 

Y esto en tu clase Controlador de Vista

 func doneButton(sender: UIBarButtonItem) { println(111) }