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 ...
随机推荐
- Golang开发环境搭建-Vim篇
一.一个干净的环境 找个干净的基础环境,方便确认每个搭建步骤后的效果: Ubuntu 14.04 x86_64 vim version 7.4.52 go version go1.4beta1 lin ...
- static 与 extern 关键字描述说明
使用static 定义的变量和函数只能用于本模块即为本文件 使用extern 定义的变量和函数可以用于其他模块的引用
- PhpStorm (强大的PHP开发环境)2017.3.2 附注册方法
最新版PhpStorm 2017正式版改进了PHP 7支持,改进代码完成功能. PhpStorm 是最好的PHP开发工具,使用它进行PHP开发将会让你感觉到编程的乐趣. 快乐无极终于从oschina看 ...
- [DT] 数据结构术语中英文对照
数据结构术语中英文对照 数据 Data 数据元素 Data element 数据项 Data item 数据结构 Data structure 逻辑结构 Logical structure 数据类型 ...
- Java 设计模式系列(一)单例模式
Java 设计模式系列(一)单例模式 保证一个类只有一个实例,并且提供一个访可该实例的全局访问点. 一.懒汉式单例 /** * 懒汉式单例类:在第一次调用的时候实例化自己 * 1. 构造器私有化,避免 ...
- 命令: go build
命令: go build 参考: https://studygolang.com/articles/9463 go help build 构建编译由导入路径命名的包,以及它们的依赖关系,但它不会安装结 ...
- android studio快捷键大全
----常用快捷键 1.Ctrl+E,可以显示最近编辑的文件列表 2.Shift+Click可以关闭文件 3.Ctrl+[或]可以跳到大括号的开头结尾 4.Ctrl+Shift+Backspace可以 ...
- CTF中的变量覆盖漏洞
https://www.cnblogs.com/bmjoker/p/9025351.html 原 作 者:bmjoker出 处:https://www.cnblogs.com/bmjoker/p/ ...
- CodeForces 518B Tanya and Postcard (题意,水题)
题意:给定两个字符串,然后从第二个中找和第一个相同的,如果大小写相同,那么就是YAY,如果大小写不同,那就是WHOOPS.YAY要尽量多,其次WHOOPS也要尽量多. 析:这个题并不难,难在读题懂题意 ...
- oracle 索引的分类
1. B树索引(默认索引,保存讲过排序过的索引列和对应的rowid值) 1)说明: 1.oracle中最常用的索引:B树索引就是一颗二叉树:叶子节点(双向链表)包含索引列和指向表中每个匹配行的ROWI ...