文档章节

ios开发之导航控制器的原理

鹿微微鹿
 鹿微微鹿
发布于 2016/04/14 18:18
字数 1232
阅读 92
收藏 1


#import "AppDelegate.h"

#import "FirstViewController.h"

#import "SecondViewController.h"

#import "ThirdViewController.h"

#import "ForthViewController.h"

@interface AppDelegate ()


@end


@implementation AppDelegate



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch.

    

     _window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];

    

    [_window setBackgroundColor:[UIColor whiteColor]];

    

#pragma mark -导航控制器原理

    //=======================原理===================

    //1.导航控制器:是一个容器视图控制器,专门用来管理其他的视图控制器

    //导航控制器管理的视图控制器在导航控制器中的存储结构是栈结构;

    //2.导航控制器永远显示栈顶的那个视图视图控制器,

    //3.让一个导航控制器去管理其他视图控制器的方法:

    //(1).将视图控制器作为导航控制器的根视图控制器,

    //(2).使用导航控制器去push出来的视图控制器,也是属于导航控制器的视图控制器

   

#pragma mark -导航控制器的使用

    //=====================使用=============

    

   //创建一个视图控制器,用来作为导航控制器的根视图控制器

    FirstViewController *first =[[FirstViewController alloc]init];

    

    //如果一个视图控制器作为导航控制器的根视图控制器,那么这个视图控制器就是

    //导航控制器栈结构的容器中的一员(而且还是第一个添加的)


    

    //1.创建导航控制器对象

    //每个导航控制器必须至少管理一个视图,所以创建方法如下

    //UINavigationController : UIViewController

      UINavigationController *navigationController = [[UINavigationController alloc]initWithRootViewController:first];

    

    

    

    //3.添加视图控制器

    //push一个视图控制器到导航控制器中

    //导航控制器用来将视图控制器添加到栈中的方法

   // SecondViewController *second = [[SecondViewController alloc]init];

    

    //[navigationController pushViewController:second animated:YES];

    

   // ThirdViewController *third

    

    

    //4.pop一个视图控制器就会将这个视图从导航控制器中移除,前提是这个视图控制器

    //已经在这个导航控制器中,导航控制器中的根视图控制器不可以移除

    //一般这个pop方法只能写在你想要移除的视图控制器中去调用;

    

    

    

    

    //2.显示在window

    _window.rootViewController = navigationController;

    

    

    [_window makeKeyAndVisible];

    


    return YES;

}


@end


ForthViewController.m:

#import "ForthViewController.h"

#import "UIView+FJView.h"

@interface ForthViewController ()


@end


@implementation ForthViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    

    self.view.backgroundColor = [UIColor cyanColor];

    

    //添加一个按钮

    UIButton *button = [[UIButton alloc]initWithFrame:

                        CGRectMake(100, 100, 30, 20)];

    [button setBackgroundColor:[UIColor redColor]];

    

    [ button addTarget:self action:@selector(onClicked:)

      forControlEvents:UIControlEventTouchUpInside];

       self.title = @"第四页";

    [self.view addSubview:button];

    

}

#pragma mark - 按钮点击

- (void)onClicked:(UIButton *) btn{

    

    //1.将当前这个导航控制器最上层的视图控制器pop

    //回到上一层视图控制器

    //[self.navigationController popViewControllerAnimated:YES];

    

    //2.将当前导航控制器pop到根视图控制器

   // [self.navigationController popToRootViewControllerAnimated:YES];

 

    

    //拿到当前导航控制器管理的所有的视图控制器(导航控制器管理的视图控制器全是

    //导航控制器的子视图控制器)

    //子视图控制器数组中数组元素得顺序和视图的添加顺序一致;

    NSArray *chirlViewControllers = self.navigationController.childViewControllers;

    

   

    //添加转场动画;

    [self.view addTransitionAnimationWithDuration:1 animationType:FJ_pageUnCurl direction:FJ_LEFT];

    

    //使用转场动画和push方法的区别;一个放到导航控制器上一个只是纯展示;

    

    

    

    //3.pop到指定的视图控制器;(指定的视图控制器必须已经在导航控制器的栈结构中的对象)

    [self.navigationController popToViewController:chirlViewControllers[1] animated:YES];

    

}


@end


ThirdViewController.m

#import "ThirdViewController.h"

#import "ForthViewController.h"

@interface ThirdViewController ()


@end


@implementation ThirdViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    

    self.view.backgroundColor = [UIColor blueColor];

    

    //添加一个按钮

    UIButton *button = [[UIButton alloc]initWithFrame:

                        CGRectMake(100, 100, 30, 20)];

    [button setBackgroundColor:[UIColor redColor]];

    

    [ button addTarget:self action:@selector(onClicked:)

      forControlEvents:UIControlEventTouchUpInside];

       self.title = @"第三页";

    [self.view addSubview:button];

    

}

#pragma mark - 按钮点击

- (void)onClicked:(UIButton *) btn{

    

    ForthViewController *forth = [[ForthViewController alloc]init];

    [self.navigationController pushViewController:forth animated:YES];

    

}




@end


SecondViewController.m


#import "SecondViewController.h"

#import "ThirdViewController.h"

@interface SecondViewController ()


@end


@implementation SecondViewController


#pragma mark - 生命周期

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    

    UIButton *button  = [[UIButton alloc]initWithFrame:

                         CGRectMake(100, 100, 40, 20)];

    button.backgroundColor = [UIColor cyanColor];

    

    [button addTarget:self action:@selector(onclicked)

     forControlEvents:UIControlEventTouchDown];

    

    [self.view addSubview:button];

    

    

       self.title = @"第二页";

    [self.view setBackgroundColor:[UIColor orangeColor]];

}


#pragma mark - 按钮点击

-(void) onclicked{

    

    //pop回到上一个界面;

    //pop方法属于导航控制器;

    //pop当前这个视图控制器

   // - (UIViewController *)popViewControllerAnimated:(BOOL)animated;

   // [self.navigationController popViewControllerAnimated:YES];

    ThirdViewController *third = [[ThirdViewController alloc]init];

    [self.navigationController pushViewController:third animated:YES];

    

    

}



- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}



@end

FirstViewController.m



#import "FirstViewController.h"

#import "SecondViewController.h"

@interface FirstViewController ()


@end


@implementation FirstViewController


#pragma mark -生命周期


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    

    self.view.backgroundColor = [UIColor lightGrayColor];

    

    //添加一个按钮

    UIButton *button = [[UIButton alloc]initWithFrame:

                        CGRectMake(100, 100, 30, 20)];

    [button setBackgroundColor:[UIColor redColor]];

    

    [ button addTarget:self action:@selector(onClicked:)

               forControlEvents:UIControlEventTouchUpInside];

    

    self.title = @"第一页";

    

    [self.view addSubview:button];

    

}

#pragma mark - 按钮点击

- (void)onClicked:(UIButton *) btn{

    

    //创建一个需要push的视图控制器对象

    SecondViewController *second = [[SecondViewController alloc]init];

    

    //只有这个视图控制器添加到导航控制器上,才可以拿到导航控制器

    //使用当前这个导航控制器push一个新的视图控制器;

    

    [self.navigationController pushViewController:second animated:YES];

   

    

}



- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


/*

#pragma mark - Navigation


// In a storyboard-based application, you will often want to do a little preparation before navigation

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    // Get the new view controller using [segue destinationViewController].

    // Pass the selected object to the new view controller.

}

*/


@end











© 著作权归作者所有

共有 人打赏支持
鹿微微鹿
粉丝 8
博文 116
码字总数 71882
作品 0
程序员
私信 提问
IOS软件开发视频教程要的来

IPhone开发实战视频教程内容介绍 1.iPhone开发实战视频教程-iOS开发视频教程 介绍了iPhone开发的开发环境iOS SDK,X-Code,Interface Builder,iTunes等;创建项目的基本步骤,项目工程中文件...

三毛钱
2016/07/09
242
3
一步一步学习iOS 5编程(第三版)-PDF中文版-正式发布!

目前,这是第一本介绍iOS 5.x 和 Xcode 4.4 的中文版书籍,尤其适合于iOS 编程开发初学者。本教程由 EntLib.com 团队编写。如有任何技术问题,欢迎留言。 电子版 – PDF 格式,支持iPhone、i...

entlib
2012/09/20
0
2
iOS 7开发快速入门随书资料

《iOS 7开发快速入门》全面、系统地介绍了iOS 7开发技术。全书共分3篇17章。 第1篇 包括第1~4章,介绍了iOS 7的新功能、iOS 7的开发工具Xcode 5、第一个iOS 7应用程序的开发、Objective-C语...

请叫我院长
2014/02/19
812
1
iOS 7:用代码解决视图控制器的View整体上移问题

如果你准备将你的老的 iOS 6 app 迁移到 iOS 7 上,那么你必须注意了。当你的老的 app 在 iOS 7 设备上运行时,所有ViewController 的视图都整体上移了,因为 iOS 7 把整个屏幕高度(包括状态...

mingxun
2014/06/09
0
0
一步一步学习 iOS 6 编程(第四版)正式发布

所有范例程序及其截图都采用Xcode 4.4 和Xcode 4.5 最新版开发工具,本书包含了最新的iOS 6 开发技术,如自动布局(Auto Layout)、集合视图(Collection View)等等。 新增内容包括:分割视...

entlib
2012/10/25
0
2

没有更多内容

加载失败,请刷新页面

加载更多

Mysql(Mariadb)数据库主从复制

Mysql主从复制的实现原理图大致如下: MySQL之间数据复制的基础是以二进制日志文件(binary log file)来实现的,一台MySQL数据库一旦启用二进制日志后,其作为master,它数据库中所有操作都...

linux-tao
51分钟前
2
0
Mysql(Mariadb)数据库主从复制

Mysql主从复制的实现原理图大致如下: MySQL之间数据复制的基础是以二进制日志文件(binary log file)来实现的,一台MySQL数据库一旦启用二进制日志后,其作为master,它数据库中所有操作都...

Linux就该这么学
今天
2
0
Mysql(Mariadb)数据库主从复制

Mysql主从复制的实现原理图大致如下: MySQL之间数据复制的基础是以二进制日志文件(binary log file)来实现的,一台MySQL数据库一旦启用二进制日志后,其作为master,它数据库中所有操作都...

xiangyunyan
今天
2
0
Android 自定义Path贝塞尔曲线View实践——旋转的花朵

一、关于贝塞尔曲线 在工业设计方面贝塞尔曲线有很多用途,同样,在Android中,贝塞尔曲线结合Path类可以实现更复杂的图形,这里我们给一个案例,来实现一种旋转的花朵。对于贝赛尔曲线的理解...

IamOkay
今天
3
0
7、redis主从复制和sentinel配置高可用

一:redis主从配置 1、环境准备 master : 192.168.50.10 6179 slave1: 192.168.50.10 6279 slave2: 192.168.50.10 6379 2、redis.conf配置文件配置 master port 6179......

刘付kin
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部