2014-01-30 20 views
24

Ich versuche, eine App mit einer Navigationsleiste (Schaltfläche Zurück, Titel usw.) und einer Tableiste (Symbolleiste unten) zu erstellen. Ich benutze Subviews, damit ich mich nicht um die Statusleiste, die Navigationsleiste, die Höhe der Tab-Leiste usw. kümmern muss. Aber ich denke, es bereitet mir Probleme, weil ich nicht herausfinden kann, wie die Nav- und Tab-Bars eingerichtet werden .Navigationsleiste programmgesteuert hinzufügen iOS

Hier ist was ich habe. Was mache ich falsch?

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 
+0

Was bedeutet jeder dieses Code hat mit dem Hinzufügen einer Navigationsleiste oder der Werkzeugleiste zu tun? Möchten Sie nur eine Navigationsleiste und eine Symbolleiste hinzufügen oder möchten Sie einen Navigationscontroller? Was binden Sie? – rdelmar

+0

Ich denke, da bin ich verwirrt. Ich möchte eine Navigationsleiste und Symbolleiste hinzufügen. Aber ich benutze Subviews, also war ich mir nicht sicher, ob ich etwas anderes machen musste. – boxmatic

Antwort

66
-(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 
} 
+1

Ich habe das zur Arbeit und zeige eine Navigationsleiste. Es hat sich jedoch als schwierig herausgestellt, Titel und Gegenstände festzulegen. – boxmatic

+1

Ich möchte auch eine Tab-Leiste mit Symbolen einrichten. – boxmatic

+0

@boxmatic Wie hast du den Titel und die Gegenstände eingerichtet? – SonOfSeuss

4

XIb Methode:

Tutorial von 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; 
} 

nur 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

+0

Dieses Tutorial ist ein bisschen alt. Ich habe versucht, die einzige Code-Version zu verwenden und konnte es nicht funktionieren lassen. – boxmatic

-2

Swift-Version, fügen Sie diese in viewDidLoad:

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

Und dies in Ihrer View-Controller-Klasse

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

Die Frage lautete, eine Navigationsleiste hinzuzufügen und nicht, wie Handler für die Elemente der Balkenschaltfläche hinzugefügt werden – genaks

Verwandte Themen