本文講的是導航欄,基本上沒有難點。
本文的佈局是,用導航欄來設置視圖的轉換,學習的內容爲怎麼改變導航欄的控件。
首先,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.
}