web-dev-qa-db-fra.com

Ajout de la barre de navigation par programmation iOS

J'essaie de créer une application avec une barre de navigation (bouton Retour, titre, etc.) et une barre d'onglets (barre d'outils en bas). J'utilise des sous-vues, je n'ai donc pas à me soucier de la barre d'état, de la barre de navigation, des hauteurs de la barre d'onglets, etc. .

Voici ce que j'ai. Qu'est-ce que je fais mal?

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
25
boxmatic
-(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{

}

Swift

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
}

rapide

 // 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
 }
68
Anbu.Karthik

méthode xib:

tutoriel de ici

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

seul 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

4
codercat

Dans Objective-C

UINavigationBar* navigationbar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, UIApplication.sharedApplication.statusBarFrame.size.height, self.view.frame.size.width, 50)];
UINavigationItem* navigationItem = [[UINavigationItem alloc] initWithTitle:@"Title"];
[navbar setItems:@[navigationItem]];
[self.view addSubview:navigationbar];

Dans Swift

let navigationBar = UINavigationBar(frame: CGRect(x: 0, y: UIApplication.shared.statusBarFrame.size.height, width: view.frame.size.width, height:44))
    let navigationItem = UINavigationItem()
    navigationItem.title = "Title"
    navigationBar.items = [navigationItem]
    self.view.addSubview(navigationBar)
1
Tharan