2014-01-30 5 views
24

Я пытаюсь создать приложение с панелью навигации (кнопка «Назад», название и т. Д.) И панель вкладок (панель инструментов внизу). Я использую subviews, поэтому мне не нужно беспокоиться о строке состояния, панели навигации, высотах панели вкладок и т. Д. Но я думаю, что это вызывает у меня проблемы, потому что я не могу понять, как настроить Nav и Tab Bars ,Добавление навигационной панели программно iOS

Вот что у меня есть. Что я делаю не так?

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

Что делает любые из этого кода нужно сделать с добавлением навигационной панели или панели инструментов? Вы пытаетесь добавить только панель навигации и панель инструментов или вам нужен контроллер навигации? Что вы связываете? – rdelmar

+0

Я предполагаю, что здесь я смущен. Я хочу добавить панель навигации и панель инструментов. Но я использую subviews, поэтому я не был уверен, что мне нужно сделать что-то другое. – boxmatic

ответ

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 
} 

Свифта метод

// 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

Я получил это, чтобы работать и показать панель навигации. Однако установление названия и предметов оказалось трудным. – boxmatic

+1

Я также хочу настроить панель вкладок с значками. – boxmatic

+0

@boxmatic Как вы создали название и предметы? – SonOfSeuss

4

XIB:

учебник от 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; 
} 

только код:

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

Раскадровка:

storyboards-tutorial-in-ios-7

enter image description here

+0

Этот учебник очень старый. Я попытался использовать единственную версию кода, и я не смог заставить ее работать. – boxmatic

-2

Swift версия, добавьте это в viewDidLoad:

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

И это в классе View Controller

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

Вопрос заключался в добавлении панели навигации, а не в том, как добавлять обработчики для элементов панели бара – genaks

Смежные вопросы