Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding Navigation Bar programmatically iOS

I am trying to make an App with a Navigation Bar (Back button, title, etc) and a Tab Bar (Toolbar on the bottom). I am using subviews so I don't have to worry about the status bar, navigation bar, tab bar heights, etc. But I think it's causing me trouble because I can't seem to figure out how to setup the Nav and Tab Bars.

Here is what I have. What am I doing wrong?

AppDelegate.h

(default for single view app) 

AppDelegate.m

(default for single view app) 

ViewController.h

#import <UIKit/UIKit.h> @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 
like image 610
Tyler C Avatar asked Jan 30 '14 05:01

Tyler C


People also ask

How do I create a navigation bar in Swift?

Start with Navigation Controller Create a single view application in Xcode. Add two view controller into your storyboard. Create two different swift files for those view controllers and set identifiers for them. Take a button in each view controller, set constrain for them and customize as you want.


2 Answers

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

Swift

 // 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  } 
like image 167
Anbu.Karthik Avatar answered Sep 17 '22 01:09

Anbu.Karthik


xib method:

tutorial from here

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

only code:

howto-implement-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); } 

storyboard:

storyboards-tutorial-in-ios-7

enter image description here

like image 42
codercat Avatar answered Sep 21 '22 01:09

codercat