上次写第到第二课的时候看到有系统更新,所以直接把Mac Os升级到10.9.5,然后把xcode也升级到了6.1版本,结果意不想到的悲情了。我把原来的xcode5直接删除了,然后用这个xcode6.1.dmg文件进行安装,装了几次总是没有模拟器,我那个郁闷啊,然后重复几次每次都是失败告终!于是果断休息一下,去吃饭,休息了2天写写VC++程序去了,再次回来已经有几好天了,准备再解决这个总是,谁知道打开机器进入系统之后,打开xcode神奇般的出现了模拟器,我只想说,你妹,要这么坑我么!
前面说了一些就再说一句,这个教程大家一定要动手去做,如果卡住了请加入我们QQ群一起探讨!QQ群在首页的公告上面有。
继续上次进度往下讲。上节界面事件都写好了,就只差网络通信了,那么这次登录我们采用的是HTTP协议,这个相信有编程基础的朋友不陌生。网络编程就会涉及到同步和异步的问题,这里面我就不详细讲了,IOS栏目有专门文章讲解《ios开发block进行网络请求回调简单封装》。代码也封装好了注释也相对清楚。这里还用到了block技术及使用id类型,这个IOS技术也有相关的文章介绍,大家可以搜索。这里面我贴出登录部分的源码
简单的封装了一下UIAlertView的使用。这里也贴出代码 UIAlertUtil.h
UIAlertUtil.m源码
UIAlertUtil.m需要讲一点,静态的UIAlertUtil变量,为什么要设置静态的呢?窗口在显示的时候,这个UIAlertUtil对象就被ARC给释放了,所以自然也就不会有clickedButtonAtIndex事件响应。所以我写成了静态的变量。这样的缺点大家想想,是什么?如果同时调用多次,那么它只会显示最后一次的title和message内容,呵呵……
好的,每天学一点。今天大家学会两点就可以了,一是HTTP编程再就是block的使用,事件代理也需要掌握,前面也用到了一些。那么本次就先到这里,下一节继续学习ios的控件,如类似安卓的Tab、ListView之类的。
前面说了一些就再说一句,这个教程大家一定要动手去做,如果卡住了请加入我们QQ群一起探讨!QQ群在首页的公告上面有。
继续上次进度往下讲。上节界面事件都写好了,就只差网络通信了,那么这次登录我们采用的是HTTP协议,这个相信有编程基础的朋友不陌生。网络编程就会涉及到同步和异步的问题,这里面我就不详细讲了,IOS栏目有专门文章讲解《ios开发block进行网络请求回调简单封装》。代码也封装好了注释也相对清楚。这里还用到了block技术及使用id类型,这个IOS技术也有相关的文章介绍,大家可以搜索。这里面我贴出登录部分的源码
-(void)loginEvent { self.dialog = [[UIProcessDialog alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; [self.view addSubview:self.dialog]; NSString *api = @"http://www.it72.com/api.php"; NSString *sData = [NSString stringWithFormat:@"username=%@&password=%@",self.nameText.text,self.pwdText.text]; BOOL isSyn = NO; if (isSyn) { //同步 NSString *dataString = [HttpUtil httpAsynchronousRequestUrl:api postStr:sData]; NSLog(@"synResult:%@",dataString); //从父窗口中移除 [self.dialog removeFromSuperview]; } else { //异步 [HttpUtil httpNsynchronousRequestUrl:api postStr:sData finshedBlock:^(NSString *dataString, NSMutableData *retData) { //从父窗口中移除 [self.dialog removeFromSuperview]; if(dataString == nil) { [UIAlertUtil showInfoAlert:@"网络出错"]; return; } NSLog(@"nsynResult:%@",dataString); NSError *error = nil; id jsonObj = [NSJSONSerialization JSONObjectWithData:retData options:NSJSONReadingMutableContainers error:&error]; if (jsonObj == nil || error != nil) { [UIAlertUtil showInfoAlert:@"数据格式错误"]; return; } NSMutableArray *array = [jsonObj objectForKey:@"result"]; NSNumber *code = [array valueForKey:@"code"]; NSString *msg = [array valueForKey:@"msg"]; if ([code intValue] == 1) { [UIAlertUtil showInfoAlert:@"登录成功"]; }else{ [UIAlertUtil showInfoAlert:msg clickBlock:^(NSInteger index) { NSLog(@"点击了%ld",index); }]; } }]; } }
简单的封装了一下UIAlertView的使用。这里也贴出代码 UIAlertUtil.h
// // UIAlertUtil.h // XQQ // // Created by leehom on 14-11-27. // Copyright (c) 2014年 leehom. All rights reserved. // #importtypedef void (^ClickBlock)(NSInteger index); //封装一个对话框 @interface UIAlertUtil : NSObject +(void)showInfoAlert:(NSString*)message; +(void)showInfoAlert:(NSString*)message clickBlock:(ClickBlock)block; +(void)showInfoAlert:(NSString*)message delegate:(id)delegate clickBlock:(ClickBlock)block; +(void)showInfoAlert:(NSString*)title message:(NSString*)message delegate:(id)delegate clickBlock:(ClickBlock)block; @property (strong,nonatomic) ClickBlock block; @property (strong,nonatomic) UIAlertView *alert; @end
UIAlertUtil.m源码
// // UIAlertUtil.m // XQQ // // Created by leehom on 14-11-27. // Copyright (c) 2014年 leehom. All rights reserved. // #import "UIAlertUtil.h" static UIAlertUtil *util = nil; @implementation UIAlertUtil +(void)showInfoAlert:(NSString*)message { [self showInfoAlert:message clickBlock:nil]; } +(void) showInfoAlert:(NSString *)message clickBlock:(ClickBlock)block { [self showInfoAlert:message delegate:nil clickBlock:block]; } +(void) showInfoAlert:(NSString *)message delegate:(id)delegate clickBlock:(ClickBlock)block { [self showInfoAlert:@"提示" message:message delegate:delegate clickBlock:block]; } +(void) showInfoAlert:(NSString *)title message:(NSString *)message delegate:(id)delegate clickBlock:(ClickBlock)block { if (util == nil) { util = [[UIAlertUtil alloc]init]; } util.block = block; util.alert = [[UIAlertView alloc]init]; [util.alert setTitle:title]; [util.alert setMessage:message]; if(delegate == nil) [util.alert setDelegate:util];//窗口在显示的时候已经被ARC释放,所以要创建一个全局的 else [util.alert setDelegate:delegate]; [util.alert addButtonWithTitle:@"确定"]; [util.alert show]; } //点击按钮的时候被调用 -(void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if (self.block != nil) { self.block(buttonIndex); } } //窗口被关闭的时候调用 -(void) alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { util.block = nil; [util.alert setTitle:@""]; [util.alert setMessage:@""]; } @end
UIAlertUtil.m需要讲一点,静态的UIAlertUtil变量,为什么要设置静态的呢?窗口在显示的时候,这个UIAlertUtil对象就被ARC给释放了,所以自然也就不会有clickedButtonAtIndex事件响应。所以我写成了静态的变量。这样的缺点大家想想,是什么?如果同时调用多次,那么它只会显示最后一次的title和message内容,呵呵……
好的,每天学一点。今天大家学会两点就可以了,一是HTTP编程再就是block的使用,事件代理也需要掌握,前面也用到了一些。那么本次就先到这里,下一节继续学习ios的控件,如类似安卓的Tab、ListView之类的。
收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (0)
站点信息
- 文章2302
- 用户1336
- 访客10968998
每日一句
Qingming Festival invites us to honor ancestors with quiet reflection and respect.
清明节邀请我们以静思与敬意祭奠祖先。
清明节邀请我们以静思与敬意祭奠祖先。
新会员