第8章IOS客户端模块实现_第1页
第8章IOS客户端模块实现_第2页
第8章IOS客户端模块实现_第3页
第8章IOS客户端模块实现_第4页
第8章IOS客户端模块实现_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章IOS客户端模块实现倚动实验室CONTENTS8.1App框架的搭建目录8.2我的高考模块实现8.3录取线查询模块实现8.4推荐学校模块实现在对我们“豹考通”进行了详细的流程和模块设计之后,我们就可以开始编码,实现我们想要实现的功能了。这里我们仅仅对App框架搭建、我的高考、分数线查询和推荐学校几个模块进行详细讲解。8.1App框架的搭建在开始编码之前,我们需要思考使用什么框架去搭建应用,根据对市面上大多数应用的分析以及对“豹考通”的需求分析来看,我们还是使用UITabbarController和UINavigationController去搭建框架,管理视图。8.1.1创建项目工程及文件步骤一:创建项目新建项目时所需要填写的相关信息含义如下:·ProductName:这是应用的名称,最好能具有代表意义,能够简单说明应用的内容,做到顾名思义。·OrganizationName:机构名称,这个名称会出现在项目每个.h和.m文件中,是用户的一个代号。比如笔者使用的是“Christopher”,那么在.h和.m文件中,就会出现如下字样,说明创建日期和版权归属。CreatedbyChristopheron5/5/14.Copyright(c)2014Christopher.Allrightsreserved.·OrganizationIdentifier:这个是公司标识符,也是用户最需要重视的一个信息,它直接关系到应用最后发布的情况。填写的格式是公司的反域名,即panyname。笔者再提一下应用发布,如果应用完成之后,想发布到AppStore中,如果填写的公司标识符与新建工程时填写的公司标识符不一致,那么上传就会失败。所以需要读者特别重视。·BundleIdentifier:Bundle包标识符,它不需要用户自己输入,而是由CompanyIdenfier加上项目名称组成,前面提到的应用发布时就是需要匹配BundleIdentifier。因为它和CompanyIdentifier有直接的关系,这个部分非常重要。·Language:选择用于开发的语言,这里提供了两种IOS开发语言供用户选择,分别是Objective-C和Swift。这里我们选择Objective-C进行开发,Swift是Apple公司最新开发的一门编程语言,它的编码形式更加简单,也更人性化,有兴趣的读者可以自己学习并使用Swift语言进行IOS的开发。·Devices:开发设备,就是你的应用面向iPhone开发还是iPad开发,或者二者都是,那么需要用户在这里选择。默认的是iPhone。·UseCoreData:CoreData是IOS开发中的一种数据管理机制,这里我们不需要勾选。步骤二:分别创建三个模块的文件夹,并创建根视图在XCode中新建文件夹8.1.2创建根视图控制器以及3个模块视图控制器步骤一:创建UIView实例1.#import<UIKit/UIKit.h>2.@interfaceBaseViewController:UITabBarController3.{4.UIView*_tabbarView;5.}6.@end步骤二:创建3模块实例,并置于根视图控制器中8.1.3在根视图Tabbar栏中创建3个模块视图步骤一:设置模块在Tabbar中的位置1.-(void)_initTabBar2.{3.

_tabbarView=[[UIViewalloc]initWithFrame:CGRectMake(0,ScreenHeight-49,320,49)];4.

[self.viewaddSubview:_tabbarView];5.

_tabbarView.backgroundColor=[UIColorcolorWithRed:0green:1blue:0.0alpha:0.3];6.

for(inti=0;i<3;i++){7.

UIButton*button=[UIButtonbuttonWithType:UIButtonTypeCustom];8.

button.frame=CGRectMake(i*100+10,(49-45)/2,100,45);9.

button.tag=i;10.[buttonaddTarget:selfaction:@selector(selectTab:)forControlEvents:UIControlEventTouchUpInside];11.[_tabbarViewaddSubview:button];12.}13.}1.-(void)selectTab:(UIButton*)button2.{3.self.selectedIndex=button.tag;4.}步骤二:添加Tabbar单击事件8.1.4在AppDelegate文件中设置根视图1.-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions2.{3.

self.window=[[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]];4.

//Overridepointforcustomizationafterapplicationlaunch.5.

self.window.backgroundColor=[UIColorwhiteColor];6.

[self.windowmakeKeyAndVisible];7.

baseViewCtrl=[[BaseViewControlleralloc]init];8.

self.window.rootViewController=baseViewCtrl;9.

[baseViewCtrlrelease];10.

returnYES;11.}应用框架界面我的高考模块运行效果8.2我的高考模块实现8.2.1在AppDelegate文件中设置根视图步骤一:创建UITableView实例1.#import<UIKit/UIKit.h>2.@interfacemyScoreViewController:UIViewController<UITableViewDataSource,UITableViewDelegate>3.@property(nonatomic,retain)UITableView*tableView;4.@end步骤二:创建UILabel实例8.2.2创建各信息填写控制器步骤一:创建子控制器步骤二:声明信息填写相关协议,实现界面传值步骤三:实现其他子视图控制器的传值全国省市plist文件存储一个plist文件包括3个部分,Key、Type和Value,这里的Key都为State,Type可以是Dictionary(字典)和NSArray(数组),Value为全国各省份地区。8.2.3UIAlertView协议实现高考成绩输入框8.2.4在基视图中显示用户填写信息NSUserDefaults读取用户选择的信息的方法如下代码所示。1.NSUserDefaults*defaults=[NSUserDefaultsstandardUserDefaults];2.NSString*subjectString=[defaultsobjectForKey:@"subject"];3.subjectLabel.text=subjectString;我的高考模块界面8.2.5广告栏设置最后需要完成的就是广告栏的设置。根据需求我们了解到,当用户生源地选择“江西”时,广告显示的内容和其他的生源地不一样,那么我们在视图显示时,首先要判断用户的生源地信息,如果是“江西”则显示第一种广告;如果不是“江西”就显示第二种广告。我的高考模块(广告)界面我的高考模块(非江西广告)界面8.3录取线查询模块实现8.3.1实现选择省市地区功能在录取线查询模块中,我们通过“省控线查询”功能讲解如何使用服务器端接口,并通过使用JSon来解析网络数据。当用户点击“省控线查询”单元格cell时,会弹出省份的子视图。因为省份信息是固定的,我们可以把它们存放到plist配置文件中,当需要用到时直接调用即可。我们这里采用就是配置文件的方法。plist配置文件采用的是key-value方式。

读取出plist文件的值将它赋给provinceArray。读取plist文件的方法非常简单,只需指定一个路径,包括文件名和类型(plist),NSBundlemainBundle是用于获取本地路径。1.NSString*plistPath=[[NSBundlemainBundle]pathForResource:@"area"ofType:@"plist"];2.proviceArray=[[NSArrayalloc]initWithContentsOfFile:plistPath];3.cell.textLabel.text=[[proviceArrayobjectAtIndex:indexPath.row]valueForKey:@"State"];8.3.2实现省份选择、分数线查询与界面跳转步骤一:在.h文件中创建各实例1.@property(nonatomic,retain)NSMutableArray*data;

//存储网络数据2.@property(nonatomic,assign)intprovinceIndex;

//省份索引值3.@property(nonatomic,copy)NSString*yearString;

//年份4.@property(nonatomic,assign)intcatagory;

//科类5.@property(nonatomic,assign)intbatch;

//批次6.@property(nonatomic,retain)UITableView*tableView;//表视图7.@property(nonatomic,retain)NSArray*yearArray;

//年份数组8.@property(nonatomic,retain)NSArray*cataArray;

//科类数组9.@property(nonatomic,retain)NSArray*batchArray;

//批次数组10.@property(nonatomic,retain)UILabel*yearLabel;

//年份标签11.@property(nonatomic,retain)UILabel*catagoryLabel;//科类标签12.@property(nonatomic,retain)UILabel*batchLabel;

//批次标签13.@property(nonatomic,retain)UILabel*areaLabel;

//生源地标签14.@property(nonatomic,retain)UILabel*lineLabel;

//分数线标签步骤二:添加网络库我们需要访问网络接口,通过HTTP协议读取请求网络数据。那么在请求网络数据之前,我们需要添加一些框架和一些第三方库。因为要使用HTTP协议,我们需要导入第三方库ASIHTTPRequest,它是一款功能十分强劲的HTTP访问开源项目。下载地址://pokeb/asi-http-request.把下载好的文件导入到XCode项目中,然后添加5个库文件:·CFNetwork·systemConfiguration·MoblieCoreServices·libz·libxml2步骤三:对查询省控线界面进行布局步骤四:添加选择省份跳转功能1.-(void)tableView:(UITableView*)tableViewdidSelectRowAtIndexPath:(NSIndexPath*)indexPath2.{3.LineViewController*line=[[LineViewControlleralloc]init];4.vinceIndex=indexPath.row;5.line.title=[[proviceArrayobjectAtIndex:indexPath.row]valueForKey:@"State"];6.[self.navigationControllerpushViewController:lineanimated:YES];7.[linerelease];8.}这里需要注意vinceIndex=indexPath.row;这行代码,因为查询省控线需要访问接口,那么就要用到相关的参数,省份索引值就是参数之一。需要的参数在编写代码之前服务器端开发人员会把接口发送给客户端开发人员。还通过line.title=[[proviceArrayobjectAtIndex:indexPath.row]valueForKey:@"State"];把每行的省市值传给了子视图,作为它的标题。8.3.3网络接口读取(远程服务器)1.NSURL*url=[NSURLURLWithString:[NSStringstringWithFormat:@"http://www.10LAB.cn/zhushou/getControlLinesJson.action?c=%ld&y=%@&s=%ld&b=%ld",(long)_catagory,_yearString,(long)province,(long)_batch]];2.ASIHTTPRequest*request=[ASIHTTPRequestrequestWithURL:url];3.[requestsetRequestMethod:@"GET"];4.[requeststartSynchronous];5.NSData*netData=request.responseData;6.NSString*jsonString=[[NSStringalloc]initWithData:netDataencoding:NSUTF8StringEncoding];7.SBJsonParser*parser=[[SBJsonParseralloc]init];8.data=[parserobjectWithString:jsonString];上述实现了访问网络数据,对最后服务器返回的结果显示。并设置了UIPickerView滑动实现的方法,对于不同的滑动位置,有不同的数据实现,这里需要读者自己每项进行设置。构架并运行模拟器,可以发现访问网络接口返回的数据如下所示。网络数据形式如下:data:({"area_name"="\U6c5f\U897f";"batch_name"="\U4e00\U672c";"category_name"="\U6587\U53f2";id=1182;line=532;yaerTime=2011;},{"area_name"="\U6c5f\U897f";"batch_name"="\U4e8c\U672c";"category_name"="\U6587\U53f2";id=1172;line=484;yaerTime=2011;},

解析的方法如下代码所示。1.ASIHTTPRequest*request=[ASIHTTPRequestrequestWithURL:url2];2.[requestsetRequestMethod:@"GET"];3.[requeststartSynchronous];4.NSData*netData=request.responseData;5.NSString*jsonString=[[NSStringalloc]initWithData:netDataencoding:NSUTF8StringEncoding];6.SBJsonParser*parser=[[SBJsonParseralloc]init];7.data=[parserobjectWithString:jsonString];8.3.4网络接口读取(本地服务器)若有些环境不能够进行远程服务器的连接与访问,我们还可以通过本地服务器请求数据。在服务器端中我们讲到了服务器与客户端交互接口的实现,用户可以使用本地PC机作为服务器,也可以直接使用我们的服务器作为数据接口。若用户使用本地服务器,在上述的代码中的URL就需要使用本地PC机的的IP地址,如下URL所示。

“http://www.10LAB.cn/zhushou/getControlLinesJson.action?”这个是我们的服务器接口URL,本地服务器把“www.10LAB.cn”改为本机IP地址即可。查看本地IP地址的方法如下,在运行窗口输入“cmd”,然后输入“ipconfig”命令查看服务器PC机的IP地址。将接口的地址改为如下代码:1.NSURL*url=[NSURLURLWithString:[NSStringstringWithFormat:@"http:/01:8080/btk/zhushou/getControlLinesJson.action?c=%ld&y=%@&s=%ld&b=%ld",(long)_catagory,_yearString,(long)province,(long)_batch]];2.NSURL*netUrl=[NSURLURLWithString:@"www.10LAB.cn"];3.ConnectNetWork*connect=[[ConnectNetWorkalloc]init];8.3.5基视图信息显示实现主界面一共有两个功能,省控线查询和高校录取线查询,这里我们实现的是省控线查询模块。searchViewController主界面如下图所示。步骤一:定义UITableView与省份NSArray实例1.#import<UIKit/UIKit.h>2.@interfacesearchScoreViewController:UIViewController<UITableViewDelegate,UITableViewDataSource>3.@property(nonatomic,retain)UITableView*tableView;4.@property(nonatomic,retain)NSArray*proviceArray;5.@end步骤二:创建并初始化UITableView实例,实现UITableView协议方法1.staticNSString*identifier=@"identifier";2.UITableViewCell*cell=nil;3.if(cell==nil){4.cell=[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:identifier];5.}6.if(indexPath.row==0){7.cell.textLabel.text=@"省控线查询";8.cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;9.}else{10.cell.textLabel.text=@"若干高校往年录取分数线";11.cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;12.}13.cell.selectedBackgroundView=[[[UIViewalloc]initWithFrame:cell.frame]autorelease];14.cell.selectedBackgroundView.backgroundColor=[UIColorcolorWithRed:0green:1blue:0alpha:0.3];15.returncell;步骤三:实现单击cell选择查询功能1.-(void)tableView:(UITableView*)tableViewdidSelectRowAtIndexPath:(NSIndexPath*)indexPath2.{3.if(indexPath.row==0){4.

provinceViewController*provice=[[provinceViewControlleralloc]init];5.

[self.navigationControllerpushViewController:proviceanimated:YES];6.

[provicerelease];7.}else{8.

schoolScoreViewController*schoolScore=[[schoolScoreViewControlleralloc]init];9.

[self.navigationControllerpushViewController:schoolScoreanimated:YES];10.[schoolScorerelease];11.}12.}两个查询分数的选择,当单击第一个cell,则跳转省控线查询;若单击第二个cell,跳转到高校往年录取分查询。构建并运行,最后的效果如下图所示。8.4推荐学校模块实现在本节中,我们将综合前面几个小节的知识,完整的展示“推荐学校”模块的实现过程。因为模块中各个控件的位置相对固定,不需要动态的变化,所以这里我们就采用Xib方法进行视图的布局。布局情况如下图所示。8.4.1创建推荐学校视图控制器与XIB文件8.4.2创建推荐学校模块实例并进行界面布局创建recommendViewController类,在推荐学校功能中,需要用户选择学校,所以还需选择省份proViewController类和选择学校SchoolInfoViewController类。在recommendViewController.h文件中,将两个子类的头文件导入,同时将Xib文件中的控件与.h文件链接起来,创建关联(插座)。步骤一:创建参数与控件实例1.@interfacerecommendViewController:UIViewController2.<UITableViewDataSource,UITableViewDelegate>3.{4.intcata;

//科类5.intbatch; //批次6.intorder; //推荐方式7.}8.@property(nonatomic,retain)NSMutableArray*data;

//存储网络数据数组9.@property(retain,nonatomic)IBOutletUISegmentedControl*batchSeg;

//批次选择控件10.@property(retain,nonatomic)IBOutletUISegmentedControl*orderSeg;

//方式选择控件11.@property(retain,nonatomic)IBOutletUILabel*areaLabel;

//生源地标签12.@property(retain,nonatomic)IBOutletUILabel*provinceLabel;

//省市标签13.@property(nonatomic,retain)NSArray*proviceIdArray;

//省份ID数组14.@property(retain,nonatomic)IBOutletUILabel*categoryLabel;

//科类标签15.@property(retain,nonatomic)IBOutletUILabel*scoreLabel;

//分数标签16.@property(retain,nonatomic)UITableView*tableView; //表视图17.@property(retain,nonatomic)UIView*titleView; //信息头视图18.-(IBAction)choosePro:(id)sender;

//选择省市按钮步骤二:添加UISegmentedControl控件方法,并读取个人信息步骤三:对信息视图以及表视图进行布局8.4.3省份选择功能实现步骤一:创建实例及协议在proViewController.h文件中,我们初始化一个表视图和一个数组用于存储省市信息,还需要声明一个协议代理方法用于视图控制器之间的传值。1.#import<UIKit/UIKit.h>2.//地区标签值改变协议3.@protocolproPickViewControllerDelegate<NSObject>4.@optional5.-(void)changeProLabelText:(NSString*)text;6.@end7.@interfaceproViewController:UIViewController<UITableViewDataSource,UITableViewDelegate>8.@property(nonatomic,retain)UITableView*tableView;9.@property(nonatomic,retain)NSArray*proviceArray;10.@property(nonatomic,assign)id<proPickViewControllerDelegate>proDelegate;11.@end步骤二:实现省份选择功能1.-(IBAction)choosePro:(id)sender2.{3.proViewController*pro=[[proViewControlleralloc]init];4.Delegate=self;5.UINavigationController*navi=[[UINavigationControlleralloc]initWithRootViewController:pro];6.[self.navigationControllerpresentViewController:navianimated:YEScompletion:NULL];7.[navirelease];8.}需要注意的是需要设置proViewController实例的代理。协议代理方法实现如下。1.#pragmamark-proPickViewControllerDelegate2.-(void)changeProLabelText:(NSString*)text3.{4._provinceLabel.text=text;5.}步骤三:对省份选择UITableView表视图布局,并实现协议方法1.[superviewDidLoad];2._tableView=[[UITableViewalloc]initWithFrame:CGRectMake(0,0,320,ScreenHeight)style:UITableViewStylePlain];3._tableView.dataSource=self;4._tableView.delegate=self;5.[self.viewaddSubview:_tableView];6.//自定义取消按钮7.UIButton*cancel=[UIButtonbuttonWithType:UIButtonTypeRoundedRect];8.cancel.frame=CGRectMake(0,0,40,20);9.[cancelsetTitle:@"取消"forState:UIControlStateNormal];10.[cancelsetShowsTouchWhenHighlighted:YES];11.[canceladdTarget:selfaction:@selector(cancelAction)forControlEvents:UIControlEventTouchUpInside];12.UIBarButtonItem*barButton=[[UIBarButtonItemalloc]initWithCustomView:cancel];13.[cancelrelease];14.self.navigationItem.leftBarButtonItem=barButton;15.[barButtonrelease];16.//读取plist文件,读取省市信息17.NSString*plistPath=[[NSBundlemainBundle]pathForResource:@"ar

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论