IOS开发基础知识--碎片6
三十三:IOS多视图跳转方法
第一种: 跳转:[self presentModalViewController:control animated:YES]; 返回:[self dismissModalViewControllerAnimated:YES]; 第二种: 跳转:[self.navigationController pushViewController:subTableViewController animated:YES]; 返回:[self.navigationController popViewControllerAnimated:YES]; 第三种:自己控制: [self.view addSubview:<#(UIView *)#>] [self.view removeFromSuperview]; 注意:pushViewController和popViewController进行视图间的切换,就必须要求当前视图是个NavigationController, 第四种:
// 根据Segue ID 执行跳转
[self performSegueWithIdentifier:@"contactList" sender:nil];
三十四:presentModalViewController与dismissModalViewControllerAnimated注意事项
在实际开发中,如果要弹出视图:
我们常用到presentModalViewController方法和dismissModalViewControllerAnimated方法。
presentModalViewController:弹出视图
dismissModalViewControllerAnimated:隐藏视图
弹出视图:
FeedbackViewController *feedbackViewController = [[FeedbackViewController alloc]initWithNibName:@"FeedbackViewController" bundle:nil];
UINavigationController *navigationController = [[UINavigationController alloc]initWithRootViewController:feedbackViewController];
[self presentModalViewController:navigationController animated:YES];
隐藏视图:
[self dismissModalViewControllerAnimated:YES];
关于这两个方法的几点说明:
.iPhone上弹出/隐藏 视图时,使用为全屏模式
.搞清楚谁是presenting,谁是presented
如果A弹出B,那么A为presenting,B为presented。
.隐藏视图的策略
我们假如A弹出B
就是说,A负责隐藏B;如果我们在B中调用dismissModalViewControllerAnimated方法,那么编译器,自动将消息发送给A。
等等,什么消息?
简单的理解,当执行presentModalViewController:方法:在A弹出B时:
执行A的viewWillDisappear方法,
通知B执行自己的viewWillAppear方法和viewDidAppear
执行A的viewDidDisappear方法
当执行dismissModalViewControllerAnimated方法:隐藏B时:
执行B的viewWillDisappear
通知A执行自己的viewWillAppear方法和viewDidAppear方法
执行B的viewDidDisappear方法
以下我做了个测试来输出一轮AB切换:
A:More
B:Feed
-- ::23.666 WTV[:] -More--viewWillDisappear----
-- ::23.672 WTV[:] -Feed--viewWillAppear----
-- ::24.086 WTV[:] -Feed--viewDidAppear----
-- ::24.087 WTV[:] -More--viewDidDisappear----
-- ::25.745 WTV[:] -Feed--viewWillDisappear----
-- ::25.745 WTV[:] -More--viewWillAppear----
-- ::26.156 WTV[:] -More--viewDidAppear----
-- ::26.157 WTV[:] -Feed--viewDidDisappear----
当我们信心慢慢,庆幸我们可以了解了这两个方法时,悲剧发生了:
.苹果官方已经把这两个方法 Deprecated in iOS 6.0. 了
- (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated;
- (void)dismissModalViewControllerAnimated:(BOOL)animated;
取而代之的是:
[self presentViewController:navigationController
animated:YES
completion:^(void){
// Code
}];
[self dismissViewControllerAnimated:YES
completion:^(void){
// Code
}];
新接口的差别是提供了一个参数,允许你传入一个block。这个block的回调方法在VC的viewWillDisappear方法后调用。也就是被隐藏的VC对象被释放后运行回调。
这样做的好处:可以方便做多个UI效果之间的衔接和转换。
三十五:视图跳载的几种动画
BaiDuViewController* baiduController=[mainStoryboard instantiateViewControllerWithIdentifier:@"baiduStoryboard"];
baiduController.modalTransitionStyle=UIModalTransitionStyleFlipHorizontal;
[self presentViewController:baiduController animated:YES completion:^{ }];
- UIModalTransitionStyleCoverVertical //新视图从下向上出现
- UIModalTransitionStyleFlipHorizontal //以设备的长轴为中心翻转出现
- UIModalTransitionStyleCrossDissolve //渐渐显示
- UIModalTransitionStylePartialCurl //原视图向上卷起
三十六:JSONKit的使用方法
json开源的类库有很多,其中JSONKit库是非常简单易用而且效率又比较高的,重要的JSONKit适用于ios .0以下的版本。 下载地址:https://github.com/johnezang/JSONKit 使用JSONKit库来解析json文件,只需要下载JSONKit.h 和JSONKit.m添加到工程中,设置支持arc,在项目中build phases中的compile sources,选择jsonkit.m然后确认键输入-fno-objc-arc #import "JSONKit.h" //假设 strJson 是网络上接收到的 json 字符串,
NSString *strJson = @"[{\"Id\": 1,\"BrandName\": \"爱马仕\" },{\"Id\": 2,\"BrandName\": \"安娜苏\"}]";
NSArray *arrlist=[strJson objectFromJSONString];
NSLog(@"%d",[arrlist count]);
for (int i=; i<[arrlist count]; i++) {
NSDictionary *item=[arrlist objectAtIndex:i];
NSString *BrandName=[item objectForKey:@"BrandName"];
NSLog(@"%@",BrandName);
} 字典arrlist便是解析好的json文件了。 JSONKit库也可以用来生成json文件 NSMutableDictionary *jsonDic = [NSMutableDictionary dictionary];
NSMutableDictionary *alert = [NSMutableDictionary dictionary]
;NSMutableDictionary *aps = [NSMutableDictionary dictionary];
[alert setObject:@"a msg come!" forKey:@"body"];
[aps setObject:alert forKey:@"alert"];
[aps setObject:@"" forKey:@"bage" ];
[aps setObject:@"def.mp3" forKey:@"sound"];
[jsonDic setObject:aps forKey:@"aps"];
NSString *strJson = [jsonDic JSONString]; 另一个,其中operation.responseString就是下面那串json字符串,通过它进行解析: NSDictionary* resultDictionary=[operation.responseString objectFromJSONStringWithParseOptions:JKParseOptionLooseUnicode];
NSLog(@"%@ Items Found!",[resultDictionary objectForKey:@"weatherinfo"]);
//{"weatherinfo":{"city":"北京","cityid":"101010100","temp":"3","WD":"北风","WS":"3级","SD":"24%","WSE":"3","time":"11:25","isRadar":"1","Radar":"JC_RADAR_AZ9010_JB","njd":"暂无实况","qy":"1028"}} self.weaLableInfo.text=[NSString stringWithFormat:@"城市:%@,温度:%@",[[resultDictionary objectForKey:@"weatherinfo"]objectForKey:@"city"],[[resultDictionary objectForKey:@"weatherinfo"]objectForKey:@"temp"]];
三十七:三十五:afnetworking2.0运用,结合json,引入afnetworking文件后,引入头文件就可以使用,支持arc
- (IBAction)JsonAction:(UIBarButtonItem *)sender {
NSString* weatherUrl=[NSString stringWithFormat:@"%@%@.html",BaseURLString,self.UrlString];
AFHTTPRequestOperationManager* manager=[AFHTTPRequestOperationManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
[manager GET:weatherUrl parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSDictionary* resultDictionary=[operation.responseString objectFromJSONStringWithParseOptions:JKParseOptionLooseUnicode];
NSLog(@"%@ Items Found!",[resultDictionary objectForKey:@"weatherinfo"]);
//{"weatherinfo":{"city":"北京","cityid":"101010100","temp":"3","WD":"北风","WS":"3级","SD":"24%","WSE":"3","time":"11:25","isRadar":"1","Radar":"JC_RADAR_AZ9010_JB","njd":"暂无实况","qy":"1028"}}
self.weaLableInfo.text=[NSString stringWithFormat:@"城市:%@,温度:%@",[[resultDictionary objectForKey:@"weatherinfo"]objectForKey:@"city"],[[resultDictionary objectForKey:@"weatherinfo"]objectForKey:@"temp"]];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error:%@",error);
}];
}
带post参数到服务端
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//申明返回的结果是json类型
manager.responseSerializer = [AFJSONResponseSerializer serializer];
//申明请求的数据是json类型
manager.requestSerializer=[AFJSONRequestSerializer serializer];
//如果报接受类型不一致请替换一致text/html或别的
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
//传入的参数
NSDictionary *parameters = @{@"":@"XXXX",@"":@"XXXX",@"":@"XXXXX"};
//你的接口地址
NSString *url=@"http://xxxxx";
//发送请求
[manager POST:url parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
IOS开发基础知识--碎片6的更多相关文章
- IOS开发基础知识碎片-导航
1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...
- IOS开发基础知识--碎片33
1:AFNetworking状态栏网络请求效果 直接在AppDelegate里面didFinishLaunchingWithOptions进行设置 [[AFNetworkActivityIndicat ...
- IOS开发基础知识--碎片42
1:报thread 1:exc_bad_access(code=1,address=0x70********) 闪退 这种错误通常是内存管理的问题,一般是访问了已经释放的对象导致的,可以开启僵尸对象( ...
- IOS开发基础知识--碎片50
1:Masonry 2个或2个以上的控件等间隔排序 /** * 多个控件固定间隔的等间隔排列,变化的是控件的长度或者宽度值 * * @param axisType 轴线方向 * @param fi ...
- IOS开发基础知识--碎片3
十二:判断设备 //设备名称 return [UIDevice currentDevice].name; //设备型号,只可得到是何设备,无法得到是第几代设备 return [UIDevice cur ...
- IOS开发基础知识--碎片11
1:AFNetwork判断网络状态 #import “AFNetworkActivityIndicatorManager.h" - (BOOL)application:(UIApplicat ...
- IOS开发基础知识--碎片14
1:ZIP文件压缩跟解压,使用ZipArchive 创建/添加一个zip包 ZipArchive* zipFile = [[ZipArchive alloc] init]; //次数得zipfilen ...
- IOS开发基础知识--碎片16
1:Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id) 对象在运行时获取其类型的能力称为内省.内省可以有多种方法实现. 判断对象类型 -(BOO ...
- IOS开发基础知识--碎片19
1:键盘事件顺序 UIKeyboardWillShowNotification // 键盘显示之前 UIKeyboardDidShowNotification // 键盘显示完成后 UIKeyboar ...
- IOS开发基础知识--碎片40
1:Masonry快速查看报错小技巧 self.statusLabel = [UILabel new]; [self.contentView addSubview:self.statusLabel]; ...
随机推荐
- Attach Volume 操作(Part II) - 每天5分钟玩转 OpenStack(54)
上一节我们讨论了 attach volume 操作中 cinder-api 的工作,本节讨论 cinder-volume 和 nova-compute 如何将 volume attach 到 Inst ...
- Vagrant使用
常用命令 命令 说明 vagrant up 运行vm vagrant status 查看当前虚拟机运行状态 vagrant suspend 暂停虚拟机 vagrant ssh ssh方式登录虚拟机 v ...
- 应用程序框架实战三十六:CRUD实战演练介绍
从本篇开始,本系列将进入实战演练阶段. 前面主要介绍了一些应用程序框架的概念和基类,本来想把所有概念介绍完,再把框架内部实现都讲完了,再进入实战,这样可以让初学者基础牢靠.不过我的精力很有限,文章进度 ...
- Util应用程序框架公共操作类(三):数据类型转换公共操作类(扩展篇)
上一篇以TDD方式介绍了数据类型转换公共操作类的开发,并提供了单元测试和实现代码,本文将演示通过扩展方法来增强公共操作类,以便调用时更加简化. 下面以字符串转换为List<Guid>为例进 ...
- 关于SVN链接服务器Unable to connect to a repository at URL*报错问题
在BAE上托管了写代码,想用SVN做版本控制,可是死活连不上,但用Dreamweave可以连上,整了半天是dan疼的缓存问题,清一下缓存就OK了. TortoiseSVN->Setting-&g ...
- 纪念我曾经的 JAVA 姿势--转
原文地址:https://segmentfault.com/a/1190000007122432?hmsr=toutiao.io&utm_medium=toutiao.io&utm_s ...
- 分享一下刚刚HP电话面试。。。。。。。。我估计我挂了,不过还是要来分享一下
面试官是个中国人,给我是全英文面试,总之是做HP的外包业务,说得很好的工作环境,里面都是一些老外在工作. 首先是要用英文介绍了下自己,我自己觉得自己也还是不错的吧,然后就说了一通(其实我好久没说英文了 ...
- DSO Framer Control Object 操作word文件
<1>DSO Framer Control Object 实现加载word文件的不可编辑 axFramerControl1.Open(OldPath); this.axFramerCont ...
- 【JUC】JDK1.8源码分析之ConcurrentLinkedQueue(五)
一.前言 接着前面的分析,接下来分析ConcurrentLinkedQueue,ConcurerntLinkedQueue一个基于链接节点的无界线程安全队列.此队列按照 FIFO(先进先出)原则对元素 ...
- springmvc4环境简单搭建和定时任务
之前复制粘贴创建了几个ssm的项目,然而回头让自己写的时候还是一头雾水,究其原因是spring的陌生.仅仅是写过几个helloworld而已.而且是照着写.我都不知道springmvc到底需要多少ja ...