上次写第到第二课的时候看到有系统更新,所以直接把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)
站点信息
- 文章2313
- 用户1336
- 访客11757097
每日一句
Life is short; Live it!
人生苦短,活出精彩。
人生苦短,活出精彩。
信鸽推送报错NSObject checkTargetOtherLinkFlagForObjc
简单利用Clover四叶草安装U盘安装黑苹果
学习使用Java注解
OllyDbg中如何找出B模块中所有调用了A模块的C方法的地方
解决SSH客户端中文乱码
10年后,Android应用程序仍然比iOS应用程序差
C++11特性里面的thread
XPosed微信自动生成二维码
解决android studio "found an invalid color"的问题
T9社区注册方法【勼适様鲃女尔懟死】
Thinkpad x1 Extreme黑苹果10.14.5安装完成
基于大白主题增加图片本地化的功能
Linux系统查看CPU使用率的几个命令
新会员