iOS学习笔记(3)--初识UINavigationController(无storyboard)
纯代码创建导航控制器UINavigationController
在Xcode6.1中创建single view application的项目,删除Main.storyboard文件,删除info.plist中main storyboard相关属性,依靠代码编写UI视图,研究导航控制器栈的原理。
AppDelegate.h文件代码
- #import <UIKit/UIKit.h>
- @interface AppDelegate : UIResponder <UIApplicationDelegate>
- @property (strong, nonatomic) UIWindow *window;
- @end
AppDelegate.m
- #import "AppDelegate.h"
- #import "ViewController.h"
- @interface AppDelegate ()
- @end
- @implementation AppDelegate
- - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
- // Override point for customization after application launch.
- self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
- ViewController *firstView = [[ViewController alloc] init];
- UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:firstView];
- [nav.navigationController pushViewController:firstView animated:YES];
- self.window.rootViewController = nav;
- self.window.backgroundColor = [UIColor whiteColor];
- [self.window makeKeyAndVisible];
- return YES;
- }
- - (void)applicationWillResignActive:(UIApplication *)application {
- // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
- // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
- }
- - (void)applicationDidEnterBackground:(UIApplication *)application {
- // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
- // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
- }
- - (void)applicationWillEnterForeground:(UIApplication *)application {
- // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
- }
- - (void)applicationDidBecomeActive:(UIApplication *)application {
- // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
- }
- - (void)applicationWillTerminate:(UIApplication *)application {
- // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
- }
- @end
- 若要实现导航控制器对视图的切换导航,UINavigationController就必须成为视图的根控制器
- 导航控制器中存在导航控制栈,显示新视图的过程就是入栈的过称[nav.navigationController pushViewController:firstView animated:YES]
- 出栈则为pop
ViewController.h
- #import <UIKit/UIKit.h>
- @interface ViewController : UIViewController
- - (IBAction)goToSecondView:(id)sender;
- @end
第二个视图的控制器头文件,定义IBAction方法,用来显示第二个视图
ViewController.m
- #import "ViewController.h"
- #import "SecondViewController.h"
- @interface ViewController ()
- @end
- @implementation ViewController
- - (void)viewDidLoad {
- [super viewDidLoad];
- // Do any additional setup after loading the view, typically from a nib.
- UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(, , , )];
- label.text = @"This the first view";
- [self.view addSubview:label];
- UIButton *nextView = [[UIButton alloc] initWithFrame:CGRectMake(, , , )];
- [nextView setTitle:@"Next View" forState:UIControlStateNormal];
- [nextView setBackgroundColor:[UIColor blueColor]];
- [nextView setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
- [nextView addTarget:self action:@selector(goToSecondView:) forControlEvents:UIControlEventTouchDown];
- [self.view addSubview:nextView];
- }
- - (IBAction)goToSecondView:(id)sender {
- SecondViewController *second = [[SecondViewController alloc] init];
- [self.navigationController pushViewController:second animated:YES];
- // UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"123" message:@"321" delegate:nil cancelButtonTitle:@"111" otherButtonTitles: nil];
- // [alert show];
- NSLog(@"click");
- }
- - (void)didReceiveMemoryWarning {
- [super didReceiveMemoryWarning];
- // Dispose of any resources that can be recreated.
- }
- @end
- 代码创建UILabel的方法是[[UILabel alloc] initWithFrame:CGRectMake(10, 50, 200, 40)]
- 将UI视图添加到当前控制器的视图中的方法[self.view addSubview:label]
- 创建UIButton并设置按钮的背景颜色、标题等属性
- 将视图与IBAction方法关联的代码[nextView addTarget:self action:@selector(goToSecondView:) forControlEvents:UIControlEventTouchDown]
- 创建第二视图控制器的实例,并把视图控制器压入控制器栈即可显示新视图[self.navigationController pushViewController:second animated:YES];
SecondViewController.h
- #import <UIKit/UIKit.h>
- @interface SecondViewController : UIViewController
- - (IBAction)goToThird:(id)sender;
- @end
- #import "SecondViewController.h"
- #import "ThirdViewController.h"
- @interface SecondViewController ()
- @end
- @implementation SecondViewController
- - (void)viewDidLoad {
- [super viewDidLoad];
- // Do any additional setup after loading the view.
- UIButton *nextView = [[UIButton alloc] initWithFrame:CGRectMake(, , , )];
- [nextView setTitle:@"Next View" forState:UIControlStateNormal];
- [nextView setBackgroundColor:[UIColor blueColor]];
- [nextView setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
- [nextView addTarget:self action:@selector(goToThird:) forControlEvents:UIControlEventTouchDown];
- [self.view addSubview:nextView];
- }
- - (void)viewDidAppear:(BOOL)animated {
- UILabel *secondLabel = [[UILabel alloc] initWithFrame:CGRectMake(, , , )];
- secondLabel.text = @"This is the second view";
- [self.view addSubview:secondLabel];
- }
- - (IBAction)goToThird:(id)sender {
- ThirdViewController *third = [[ThirdViewController alloc] init];
- [self.navigationController pushViewController:third 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
ThirdViewController.h
- #import <UIKit/UIKit.h>
- @interface ThirdViewController : UIViewController
- @end
ThirdViewController.m
- #import "ThirdViewController.h"
- @interface ThirdViewController ()
- @end
- @implementation ThirdViewController
- - (void)viewDidLoad {
- [super viewDidLoad];
- // Do any additional setup after loading the view.
- }
- - (void)didReceiveMemoryWarning {
- [super didReceiveMemoryWarning];
- // Dispose of any resources that can be recreated.
- }
- - (void)viewDidAppear:(BOOL)animated {
- UILabel *secondLabel = [[UILabel alloc] initWithFrame:CGRectMake(, , , )];
- secondLabel.text = @"This is the third view";
- [self.view addSubview:secondLabel];
- }
- /*
- #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
第二视图和第三视图代码结构与第一视图类似,输入完以上代码后,运行程序即可实现简单的导航控制器切换视图的功能。
iOS学习笔记(3)--初识UINavigationController(无storyboard)的更多相关文章
- IOS 学习笔记(2) 视图UINavigationController
1.栈 导航控制器自身有一个针对显示内容的栈,也有一个对于导航栏的栈,当有新的内容欲显示时,进的导航栏和显示内容会被压入此栈,这样原本显示中的导航栏和显示内容则会进入到栈的更深一层中,根据栈的先进后出 ...
- iOS学习笔记-自己动手写RESideMenu
代码地址如下:http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars数 ...
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- iOS学习笔记总结整理
来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...
- Storm学习笔记 - Storm初识
Storm学习笔记 - Storm初识 1. Strom是什么? Storm是一个开源免费的分布式计算框架,可以实时处理大量的数据流. 2. Storm的特点 高性能,低延迟. 分布式:可解决数据量大 ...
- iOS学习笔记-地图MapKit入门
代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...
- iOS学习笔记22-推送通知
一.推送通知 推送通知就是向用户推送一条信息来通知用户某件事件,可以在应用退到后台后,或者关闭后,能够通过推送一条消息通知用户某件事情,比如版本更新等等. 推送通知的常用应用场景: 一些任务管理APP ...
- iOS学习笔记20-地图(二)MapKit框架
一.地图开发介绍 从iOS6.0开始地图数据不再由谷歌驱动,而是改用自家地图,当然在国内它的数据是由高德地图提供的. 在iOS中进行地图开发主要有三种方式: 利用MapKit框架进行地图开发,利用这种 ...
- iOS学习笔记——AutoLayout的约束
iOS学习笔记——AutoLayout约束 之前在开发iOS app时一直以为苹果的布局是绝对布局,在IB中拖拉控件运行或者直接使用代码去调整控件都会发上一些不尽人意的结果,后来发现iOS在引入了Au ...
- IOS学习笔记25—HTTP操作之ASIHTTPRequest
IOS学习笔记25—HTTP操作之ASIHTTPRequest 分类: iOS2012-08-12 10:04 7734人阅读 评论(3) 收藏 举报 iosios5网络wrapper框架新浪微博 A ...
随机推荐
- OGNL入门
------------------siwuxie095 OGNL 入门 1.OGNL 支持对象方法调用,即 objName.methodName() 如:使用 OGNL 表达式 + Struts2 ...
- Golang之方法(自定义类型,struct)
方法的使用,请看本天师的代码 //Golang的方法定义 //Golang中的方法是作用在特定类型的变量上,因此自定义类型,都可以有方法,不仅仅是struct //定义:func (recevier ...
- memcache can't run as root without the -u switch
memcached是一款高速.分布式的内存缓存系统.其官方主页在http://www.danga.com/memcached/1.安装前的准备要安装memcached,需要有libevent的支持.c ...
- Mac 安装GCC
OS X上安装Homebrew和GCC的图文攻略 2016年08月31日 11:21:27 白马负金羁 阅读数:11380 标签: OS XGCCHomebrew 更多 个人分类: 应用技巧 版权 ...
- 09 Finding a Motif in DNA
Problem Given two strings ss and tt, tt is a substring of ss if tt is contained as a contiguous coll ...
- C#使用Log4Net记录日志(转)
出处:http://www.cnblogs.com/wangsaiming/archive/2013/01/11/2856253.html 第一步:下载Log4Net 下载地址:http://logg ...
- 声音处理(Cool Edit)
平直化处理 上升半音
- DE0-Nano-SoC开发板诡异的电源电路方案设计分析
这些日子一直在设计自己的Cyclone V SoC开发板,由于我们这种散兵游勇,是断然没有厂家和代理技术支持的,因此只能找各种现成方案参考.其实Cyclone V SoC芯片的外围电路设计不难,无非就 ...
- kali下firefox的安装
在kali的系统中自带了一个firefox分支下的浏览器Iceweasel(Iceweasel是Mozilla Firefox浏览器的Debian再发布版),但是怎么说也配不上kali的强悍气势.还是 ...
- 9、Dockerfile语法
在Dockerfile中定义了很多关键字,通过关键字来完成Dockerfile的编写. Dockerfile官方文档 9.1 FROM 在Dockerfile中FROM主要是指定这个Doc ...