视图导航栏UInavigationController

来源:互联网 发布:淘宝苏哥战地1购买流程 编辑:程序博客网 时间:2024/06/09 17:13

本文讲的是导航栏,基本上没有难点。

本文的布局是,用导航栏来设置视图的转换,学习的内容为怎么改变导航栏的控件。

首先,AppDelegate.m中的代码有所改变

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    _window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];    _window.backgroundColor  = [UIColor whiteColor];    LoginViewController *loginVC = [[LoginViewController alloc]init];    //创建导航控制器,并默认让那个试图控制器的view默认显示    UINavigationController *navigationC = [[UINavigationController alloc]initWithRootViewController:loginVC];    RegisterViewController *registerVC = [[RegisterViewController alloc]init];    //将导航控制器设置为_window的跟视图控制器    _window.rootViewController = navigationC;//    //将RegisterVC入栈//    [navigationC pushViewController:registerVC animated:YES];//    [navigationC release];    [_window makeKeyAndVisible];    // Override point for customization after application launch.    return YES;}

两个页面,一个登录页面,一个注册页面。

首先是登录页面控制器。

#import "LoginViewController.h"#import "RegisterViewController.h"@interface LoginViewController ()@end@implementation LoginViewController- (void)viewDidLoad {    [super viewDidLoad];    self.view.backgroundColor = [UIColor yellowColor];    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];    button.backgroundColor = [UIColor grayColor];    [button setTitle:@"注册" forState:UIControlStateNormal];    [button addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside];    button.frame = CGRectMake(100, 400, 80, 40);    [self.view addSubview:button];#pragma mark ==============UINavigationBar(导航栏)    /*     设置导航栏的barStyle(样式)和translucent(透明度)     */    //默认(白色,半透明)    self.navigationController.navigationBar.barStyle  = UIBarStyleDefault;    //是否透明    self.navigationController.navigationBar.translucent = YES;    //设置成黑色//    self.navigationController.navigationBar.barStyle = UIBarStyleBlack;    //设置成不透明//    self.navigationController.navigationBar.translucent = NO;    //设置背景颜色,IOS 7.0之后的新特性,有局限性,就是变成不透明了    self.navigationController.navigationBar.barTintColor = [UIColor cyanColor];    //如果要改变的话,用backgroundColor//    self.navigationController.navigationBar.backgroundColor = [UIColor cyanColor];    //设置导航栏上的控件的颜色jing    self.navigationController.navigationBar.tintColor = [UIColor redColor];    NSString *string = @"NavBar_64@2x.png";    UIImage *icon = [UIImage imageNamed:string];    //设置背景图片,后面的那个参数可以设置在那个状态下的背景图片,会根据图片的大小自动判断是否是44或64,使用状态栏    [self.navigationController.navigationBar setBackgroundImage:icon forBarMetrics:UIBarMetricsDefault];//    NSString *string1 = @"NavBar_44.png";//    UIImage *icon1 = [UIImage imageNamed:string1];//    //    [self.navigationController.navigationBar setBackgroundImage:icon1 forBarMetrics:UIBarMetricsDefault ];//    NSString *string2 = @"NavBar_30.png";//    UIImage *icon2 = [UIImage imageNamed:string2];//    //    [self.navigationController.navigationBar setBackgroundImage:icon2 forBarMetrics:UIBarMetricsDefault ];    [self.navigationController.navigationItem setPrompt:@"Prompt"];#pragma mark --------------导航栏上要显示的内容:UINavigationItem    //①每一个导航控制器(NavigationController),有且只有一个导航栏(NavigationBar)    //②导航栏上面展示的都是UINavigationItem里面的内容    //③每个视图控制器都有一个navigationItem    //设置导航栏上的UIBarButtonItem,三种设置方式    //1.系统样式    UIBarButtonItem *rightBI = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(clickRightButtonItem:)];    self.navigationItem.rightBarButtonItem = rightBI;    [rightBI release];    //2.使用tittle初始化设置UIBarButtonItem,设置成文字    UIBarButtonItem *barTittle = [[UIBarButtonItem alloc]initWithTitle:@"微信" style:UIBarButtonItemStylePlain target:self action:@selector(clickRightButtonItem:)];    self.navigationItem.rightBarButtonItem = barTittle;   //设置导航栏上显示的内容    self.navigationItem.title = @"消息";    //3.使用图片设置UIbarButtonItem,此时,image需要进行渲染,默认渲染为模板样式,我们需要对image渲染设置为原图的方式    //默认为模板方式    UIImage *image2 = [UIImage imageNamed:@"NavBtnLeft.png"];    //渲染图片 需要一个新的图片来接收    UIImage *image3 = [image2 imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];    //设置    UIBarButtonItem *left = [[UIBarButtonItem alloc]initWithImage:image3 style:UIBarButtonItemStyleDone target:self action:@selector(clickRightButtonItem:)];    self.navigationItem.leftBarButtonItem = left;    //设置导航栏上要显示的titleView    self.navigationItem.titleView = [[UISegmentedControl alloc]initWithItems:@[@"消息",@"电话"]];    // Do any additional setup after loading the vbiew.}-(void)clickRightButtonItem:(UIBarButtonItem *)barButton{    NSLog(@"%s",__FUNCTION__);}-(void)viewWillAppear:(BOOL)animated{    [super viewWillAppear:animated];    NSLog(@"%s",__FUNCTION__);}-(void)viewDidAppear:(BOOL)animated{    [super viewDidAppear:animated];    NSLog(@"%s",__FUNCTION__);}-(void)viewWillDisappear:(BOOL)animated{    [super viewWillDisappear:animated];    NSLog(@"%s",__FUNCTION__);}-(void)viewDidDisappear:(BOOL)animated{    [super viewDidDisappear:animated];    NSLog(@"%s",__FUNCTION__);}-(void)clickButton:(UIButton *)button{    //创建要入栈的试图控制器    RegisterViewController *registerVC = [[RegisterViewController alloc]init];    [self.navigationController pushViewController:registerVC animated:YES];//    [registerVC.button]  //这里没法调用button,因为还没有创建#warning ---------------属性传值    registerVC.text = [button titleForState:UIControlStateNormal];#warning ----------容易出错的地方    //下面的这句话是错误的,应为label还没有创建,如果要想使用的话 加一句代码  [registerVC view];    registerVC.label.text = [button titleForState:UIControlStateNormal];    [registerVC release];}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}

下面就是注册页面的内容

#import <UIKit/UIKit.h>@interface RegisterViewController : UIViewController//用来接受上个页面传过来的字符串@property(nonatomic,retain)NSString * text;#warning mark---------将label声明为属性@property(nonatomic,retain)UILabel * label;@end
#import "RegisterViewController.h"@interface RegisterViewController ()@end@implementation RegisterViewController- (void)viewDidLoad {    [super viewDidLoad];    self.view.backgroundColor = [UIColor cyanColor];    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];    button.backgroundColor = [UIColor grayColor];    [button setTitle:@"返回" forState:UIControlStateNormal];    [button addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside];    button.frame = CGRectMake(100, 400, 80, 40);    [self.view addSubview:button];    self.navigationItem.title = _text;    UIBarButtonItem *rightBI = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(clickRightButtonItem:)];    self.navigationItem.rightBarButtonItem = rightBI;    [rightBI release];    self.label  = [[UILabel alloc]initWithFrame:CGRectMake(100, 200, 130, 30)];    _label.backgroundColor = [UIColor redColor];    _label.text = _text;    [self.view addSubview:_label];    [_label release];    // Do any additional setup after loading the view.}-(void)clickButton:(UIButton *)button{//    //返回上一次//    [self.navigationController popViewControllerAnimated:YES];//    //    //    //返回到第一级的页面(显示栈低试图控制器,其中栈低和湛顶之间的所有视图控制器都会被pop出栈,不需要手动pop//    [self.navigationController popToRootViewControllerAnimated:YES];//    //        //返回到指定页面    NSArray *arr = self.navigationController.viewControllers;    [self.navigationController popToViewController:arr[0] animated:YES];    NSLog(@"%@",self.navigationController.viewControllers);}-(void)clickRightButtonItem:(UIBarButtonItem *)barButton{    NSLog(@"%s",__FUNCTION__);}-(void)viewWillAppear:(BOOL)animated{    [super viewWillAppear:animated];    NSLog(@"%s",__FUNCTION__);}-(void)viewDidAppear:(BOOL)animated{    [super viewDidAppear:animated];    NSLog(@"%s",__FUNCTION__);}-(void)viewWillDisappear:(BOOL)animated{    [super viewWillDisappear:animated];    NSLog(@"%s",__FUNCTION__);}-(void)viewDidDisappear:(BOOL)animated{    [super viewDidDisappear:animated];    NSLog(@"%s",__FUNCTION__);}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}
0 0