UINavigation詳解

UINavigation詳解

(1)導航控制器初始化的時候一般都有一個根視圖控制器,導航控制器相當於一個棧,裏面裝的是視圖控制器,最先進去的在最下面,最後進去的在最上面。在最上面的那個視圖控制器的視圖就是這個導航控制器對外展示的界面,也就是用戶看到的界面。

(2)我們需要把導航控制器加載到APP中,需要把這個導航控制器設置爲window的根視圖控制器(都是控制器類,可以賦值),這樣就相當於加載到了window裏。
(3)我們要在棧中新增或者刪除一個視圖控制器,就需要得到導航控制器,一般在棧中得所有視圖控制器都有一個self.navigationController,意思是我的導航控制器,也就是這個視圖控制器所在的導航控制器,這樣就拿到了導航控制器。
(4)棧中新增視圖控制器用pushViewController,其實就是push進去一個,這樣對於用戶而言就是打開一個新界面了。
(5)棧中刪除一個視圖控制器用popViewControllerAnimated,當然這個pop只能pop最上面的那個,對於用戶而言相當於從當前視圖回到上一級視圖。
(6)其實這個push和pop對於用戶而言都是打開和跳轉頁面的一個操作。而pop由更多地操作方法,如一下子pop掉只剩下一個根視圖控制器,那麼就相當於從好幾層直接回到最原始的主頁面。也可以指定pop幾個,以跳轉到指定的頁面。
(7)最重要的應該就是這個push和pop方法,而pop有很多種,這個理解後就不難記憶。
(a)AppDelegate.m中,增加下面代碼:

#import "AppDelegate.h"
//因爲要實例化一個對象,需要這個類,所以導入
#import "ViewController.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//創建一個視圖控制器,以屆時作爲導航控制器的根視圖控制器
ViewController *root1=[[ViewController alloc]init];
//初始化導航控制器的時候把上面創建的root1初始化給它
UINavigationController *nav1=[[UINavigationController alloc]initWithRootViewController:root1];
//最後,我們把window的根視圖控制器設爲導航控制器,這樣導航控制器就能夠顯示在屏幕上
self.window.rootViewController=nav1;
// Override point for customization after application launch.
return YES;
}

@end

(b)在ViewController.m增加以下代碼:

#import "ViewController.h"
//因爲需要實例化一個對象,所以導入它
#import "SecondViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
//創建一個按鈕,點擊後進入子視圖控制器,相當於進入子頁面
UIButton *btn1=[UIButton buttonWithType:UIButtonTypeRoundedRect];
btn1.frame=CGRectMake(38, 100, 300, 30);
[btn1 setTitle:@"jump to secondviewcontroller" forState:UIControlStateNormal];
btn1.backgroundColor=[UIColor whiteColor];
self.view.backgroundColor=[UIColor redColor];
[btn1 addTarget:self action:@selector(jumpTo) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn1];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}

-(void)jumpTo{
//這裏面核心的有兩個,所謂跳轉,其實就是往導航控制器棧中PUSH或者POP一個視圖控制器,這樣在最上面的視圖控制器就變了,這樣視圖也跟着變了,因爲只顯示在棧頂得那個視圖控制器的視圖
//所以(1)控制所謂的跳轉,其實是導航控制器在控制,在裏面的元素都可以通過navigationController屬性獲取到它們所在的導航控制器
//所以(2)獲取到導航控制器之後,使用Push的那個方法,往棧裏面放一個視圖控制器senCon1,這個新放入的在棧頂,就顯示它的視圖,所以用戶改變頁面跳轉了
SecondViewController *senCon1=[[SecondViewController alloc]init];
[self.navigationController pushViewController:senCon1 animated:YES];
}

@end

(c)在SecondViewController.m中增加以下代碼:

#import "SecondViewController.h"

@interface SecondViewController ()

@end

@implementation SecondViewController

- (void)viewDidLoad {
UILabel *label1=[[UILabel alloc]init];
label1.frame=CGRectMake(38, 80, 300, 30);
label1.backgroundColor=[UIColor whiteColor];
label1.text=@"This is secondviewcontroller";
[self.view addSubview:label1];

UIButton *btn2=[UIButton buttonWithType:UIButtonTypeRoundedRect];
btn2.frame=CGRectMake(38, 120, 300, 30);
[btn2 setTitle:@"backTo" forState:UIControlStateNormal];
btn2.backgroundColor=[UIColor orangeColor];
[self.view addSubview:btn2];
[btn2 addTarget:self action:@selector(backTo) forControlEvents:UIControlEventTouchUpInside];
[super viewDidLoad];

// Do any additional setup after loading the view.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章