三十三: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:^{ }];
  1. UIModalTransitionStyleCoverVertical  //新视图从下向上出现
  2. UIModalTransitionStyleFlipHorizontal //以设备的长轴为中心翻转出现
  3. UIModalTransitionStyleCrossDissolve  //渐渐显示
  4. 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的更多相关文章

  1. IOS开发基础知识碎片-导航

    1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...

  2. IOS开发基础知识--碎片33

    1:AFNetworking状态栏网络请求效果 直接在AppDelegate里面didFinishLaunchingWithOptions进行设置 [[AFNetworkActivityIndicat ...

  3. IOS开发基础知识--碎片42

    1:报thread 1:exc_bad_access(code=1,address=0x70********) 闪退 这种错误通常是内存管理的问题,一般是访问了已经释放的对象导致的,可以开启僵尸对象( ...

  4. IOS开发基础知识--碎片50

      1:Masonry 2个或2个以上的控件等间隔排序 /** * 多个控件固定间隔的等间隔排列,变化的是控件的长度或者宽度值 * * @param axisType 轴线方向 * @param fi ...

  5. IOS开发基础知识--碎片3

    十二:判断设备 //设备名称 return [UIDevice currentDevice].name; //设备型号,只可得到是何设备,无法得到是第几代设备 return [UIDevice cur ...

  6. IOS开发基础知识--碎片11

    1:AFNetwork判断网络状态 #import “AFNetworkActivityIndicatorManager.h" - (BOOL)application:(UIApplicat ...

  7. IOS开发基础知识--碎片14

    1:ZIP文件压缩跟解压,使用ZipArchive 创建/添加一个zip包 ZipArchive* zipFile = [[ZipArchive alloc] init]; //次数得zipfilen ...

  8. IOS开发基础知识--碎片16

    1:Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id) 对象在运行时获取其类型的能力称为内省.内省可以有多种方法实现. 判断对象类型 -(BOO ...

  9. IOS开发基础知识--碎片19

    1:键盘事件顺序 UIKeyboardWillShowNotification // 键盘显示之前 UIKeyboardDidShowNotification // 键盘显示完成后 UIKeyboar ...

  10. IOS开发基础知识--碎片40

    1:Masonry快速查看报错小技巧 self.statusLabel = [UILabel new]; [self.contentView addSubview:self.statusLabel]; ...

随机推荐

  1. 虚拟 ​router 原理分析- 每天5分钟玩转 OpenStack(101)

    上一节我们创建了虚拟路由器"router_100_101",并通过 ping 验证了 vlan100 和 vlan101 已经连通. 本节将重点分析其中的原理. 首先我们查看控制节 ...

  2. ASP.NET MVC之表单集合数据自动绑定到对象属性(集合)中

    前言 之前没遇到过这个问题,在项目中遇到这个问题时想法挺好,按照流程走下去,结果事与愿违,于是开始探索着解决方案,接下来我们来看看这个问题,早已经明了的童鞋请绕道,此文仅供未遇到的童鞋提供一种解决方案 ...

  3. 使用Ubuntu 12.04作为日常电脑环境

    搜狗输入法出来之后,我觉得有必要写一篇博客说明一下,如何使用Ubuntu作为日常的电脑系统.我使用的Ubuntu版本是12.04,没有使用Ubuntukylin,因为的电脑比较老,使用那个版本,电脑有 ...

  4. typeof知多少

    昨天同事给我看了一道代码题,是关于typeof的,感觉挺有意思的,在这里分享给大家,顺便自己再对typeof总结总结.如有不对,请给予指出,共同进步. 代码是这样的: <!DOCTYPE htm ...

  5. EntityFramework 7 OrderBy Skip Take-计算排序分页 SQL 翻译

    先解释一下这个标题的意思,OrderBy 在 Linq 语句中,我们经常使用,比如 OrderBy(b => b.BlogId) 就是对 BlogId 字段进行升序排序,这是针对一个字段的排序, ...

  6. 结婚虽易,终老不易:EntityFramework和AutoMapper的婚后生活

    写在前面 我到底是什么? 越界的可怕 做好自己 后记 上一篇<恋爱虽易,相处不易:当EntityFramework爱上AutoMapper>文章的最后提到,虽然AutoMapper为了En ...

  7. Android 程序打包及签名

    为什么要签名??? 开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样的名字,这时候如何区分?签名这时候就是起区分作用的. 由于开发商可能通过使用相同的Package Name来 ...

  8. CSS3魔法堂:说说Multi-column Layout

    前言  是否记得<读者文摘>中那一篇篇优美感人的文章呢?那除了文章内容外,还记得那报刊.杂志独有的多栏布局吗?  当我们希望将报刊.杂志中的阅读体验迁移到网页上时,最简单直接的方式就是采用 ...

  9. jQuery网页版五子棋小游戏源码下载

    体验效果:http://hovertree.com/texiao/game/4/ 网页五子棋源代码: <!DOCTYPE html> <html> <head> & ...

  10. [Q&A] 类Range的PasteSpecial方法无效

    环境说明: VS2013(C#) + Office2013 Bug说明: range1.Copy(Type.Missing); range2.PasteSpecial(Excel.XlPasteTyp ...