視圖導航欄UInavigationController

本文講的是導航欄,基本上沒有難點。

本文的佈局是,用導航欄來設置視圖的轉換,學習的內容爲怎麼改變導航欄的控件。

首先,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 = @"[email protected]";
    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.
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章