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
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.
-(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 }
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With