本文实例分享了ios购物分类模块的实现方案,供大家参考,具体内容如下
启动
在appdelegate中创建主视图控制器。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
- (bool)application:(uiapplication *)application didfinishlaunchingwithoptions:(nsdictionary *)launchoptions {
// override point for customization after application launch.
self.window = [[uiwindow alloc] initwithframe:[[uiscreen mainscreen] bounds]];
// override point for customization after application launch.
self.window.backgroundcolor = [uicolor whitecolor];
[self.window makekeyandvisible];
basetabarcontroller*base=[[basetabarcontroller alloc]init];
self.window.rootviewcontroller=base;
return yes;
}
|
ui框架设计
basetabbarcontroller基于uitabbarcontroller,作为主视图控制器。
头文件如下:
| 1 2 3 |
@interface basetabarcontroller : uitabbarcontroller
@end
|
实现文件中主要做了2点:创建视图控制器classviewcontroller,并将它设置到新创建的创建导航控制器中。
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
- (void)viewdidload {
[super viewdidload];
self.tabbar.tintcolor = [uicolor redcolor];
// self.tabbar.bartintcolor = [uicolor blackcolor];
classviewcontroller*classlist=[[classviewcontroller alloc]init];
//classlist.title=@"分类";
[self addchildviewcontroller:classlist title:@"分类" image:@""];
uibutton *menubtn = [uibutton buttonwithtype:uibuttontypecustom];
menubtn.frame = cgrectmake(0, 0, 20, 18);
[menubtn setbackgroundimage:[uiimage imagenamed:@"1.png"] forstate:uicontrolstatenormal];
[menubtn addtarget:self action:@selector(openorcloseleftlist) forcontrolevents:uicontroleventtouchupinside];
self.navigationitem.leftbarbuttonitem = [[uibarbuttonitem alloc] initwithcustomview:menubtn];
//self.tabbar.bartintcolor = [uicolor redcolor];
}
- (void)addchildviewcontroller:(uiviewcontroller *)childcontroller title:(nsstring *)title image:(nsstring *)image{
uinavigationcontroller *childvc = [[uinavigationcontroller alloc]initwithrootviewcontroller:childcontroller];
childvc.tabbaritem.title = title;
childvc.tabbaritem.image = [uiimage imagenamed:image];
childvc.navigationbar.bartintcolor = [uicolor whitecolor];
[self addchildviewcontroller:childvc];
}
|
主要的界面视图控制器定义:
?| 1 2 3 |
@interface classviewcontroller : uiviewcontroller
@end
|
实现文件中:
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
- (void)viewdidload {
[super viewdidload];
// do any additional setup after loading the view.
uibarbuttonitem *searchbarbuttonitem = [[uibarbuttonitem alloc] initwithbarbuttonsystemitem:uibarbuttonsystemitemsearch target:self action:@selector(searchbarbuttonitemaction)];
self.navigationitem.rightbarbuttonitem = searchbarbuttonitem;
[self setdata];
[self setimage];
[self setdeatil];
_a=1;
_b=1;
_segement=[[uisegmentedcontrol alloc]initwithitems:@[@"攻略",@"详情"]];
_segement.frame=cgrectmake(90, 20, kwidth-180, 30);
_segement.tintcolor=[uicolor blackcolor];
_segement.selectedsegmentindex=0;
[_segement addtarget:self action:@selector(changevalue:) forcontrolevents:(uicontroleventvaluechanged)];
self.navigationitem.titleview =_segement;
self.scrollview=[[uiscrollview alloc]initwithframe:cgrectmake(0, 0, kwidth, kheight)];
_scrollview.directionallockenabled=yes;
_scrollview.contentsize=cgsizemake(kwidth*2, kheight);
_scrollview.delegate=self;
[self.view addsubview:self.scrollview];
uicollectionviewflowlayout*flow=[[uicollectionviewflowlayout alloc]init];
//列距
flow.minimuminteritemspacing=20;
//行距
flow.minimumlinespacing=40;
//分区内边距
flow.sectioninset=uiedgeinsetsmake(0, 20, 20, 20);
cgfloat totalwidth=self.view.frame.size.width;
cgfloat itemwidth=(totalwidth-2*20-3*20)/4.0;
cgfloat itemheight=itemwidth;
flow.itemsize=cgsizemake(itemwidth, itemheight);
flow.headerreferencesize=cgsizemake(0, 40);
//滚动方向
flow.scrolldirection= uicollectionviewscrolldirectionvertical;
;
//区头大小
flow.headerreferencesize=cgsizemake(0, 100);
_collection=[[uicollectionview alloc]initwithframe:[uiscreen mainscreen].bounds collectionviewlayout:flow];
_collection.backgroundcolor=[uicolor whitecolor];
_collection.tag=1;
_srr=@[@"1",@"s",@"2",@"r"];
for (nsstring*st in _srr) {
[_collection registerclass:[uicollectionreusableview class] forsupplementaryviewofkind:uicollectionelementkindsectionheader withreuseidentifier:st];}
//设置 数据源 和代理
_collection.datasource=self;
_collection.delegate=self;
[_collection registerclass:[classcollectionviewcell class] forcellwithreuseidentifier:@"mycell"];
// _collection.backgroundcolor=[uicolor yellowcolor];
_collection.directionallockenabled=yes;
[self.scrollview addsubview:_collection];
uiview*view=[[uiview alloc]initwithframe:cgrectmake(kwidth, 0, kwidth, 30)];
// view.backgroundcolor = [uicolor whitecolor];
uibutton*label=[uibutton buttonwithtype:(uibuttontypesystem)];
label.frame=cgrectmake(0, 20, 200, 14) ;
[label settitle:@"选礼神器" forstate:(uicontrolstatenormal)];
[label addtarget:self action:@selector(xuan) forcontrolevents:(uicontroleventtouchupinside)];
[view addsubview:label];
[self.scrollview addsubview:view];
|
网络数据封装
基于nfnetworking,封装了3个接口
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
@interface lorequestmanger : nsobject
+ (void)post:(nsstring *)url params:(nsdictionary * )params success:(void (^)(id response))success
failure:(void (^)(afhttprequestoperation *operation,nserror *error))error;
+ (void)get:(nsstring *)url
success:(void (^)(id response))success
failure:(void (^)(afhttprequestoperation *operation,nserror *error))error;
+ (void)uploadimage:(nsstring *)url
params:(nsdictionary *)params
uploadimage:(uiimage *)image
success:(void (^)(id response))success
failure:(void (^)(afhttprequestoperation *operation,nserror *error))error;
@end
|
实现文件:
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
#import "lorequestmanger.h"
#define serverurl @"http://192.168.1.1:8080/jiekou"
@implementation lorequestmanger
+ (void)post:(nsstring *)url params:(nsdictionary * )params success:(void (^)(id response))success
failure:(void (^)(afhttprequestoperation *operation,nserror *error))error
{
// 创建请求管理者
afhttprequestoperationmanager *manager = [afhttprequestoperationmanager manager];
// 请求超时时间
manager.requestserializer.timeoutinterval = 30;
nsstring *poststr = url;
if (![url hasprefix:@"http"]) {
poststr = [nsstring stringwithformat:@"%@%@", serverurl,url] ;
}
nsmutabledictionary *dict = [params mutablecopy];
// 发送post请求
[manager post:poststr parameters:dict success:^(afhttprequestoperation *operation, id responseobject) {
// 请求成功
nsdictionary *responsedict = (nsdictionary *)responseobject;
success(responsedict);
} failure:^(afhttprequestoperation *operation, nserror *error) {// 请求失败
error( operation,error);
}];
}
+ (void)get:(nsstring *)url
success:(void (^)(id response))success
failure:(void (^)(afhttprequestoperation *operation,nserror *error))error
{
// 获得请求管理者
afhttprequestoperationmanager *manager = [[afhttprequestoperationmanager alloc] init];
manager.requestserializer = [afjsonrequestserializer serializer];
[manager.requestserializer sethttpshouldhandlecookies:no];
manager.requestserializer.timeoutinterval = 30;
nsstring *getstr = url;
// nslog(@"getstr======%@",getstr);
if (![url hasprefix:@"http"]) {
getstr = [nsstring stringwithformat:@"%@%@", serverurl,url] ;
}
// 发送get请求
[manager get:getstr parameters:nil success:^(afhttprequestoperation *operation, id responseobject) {
// nslog(@"getstr------------%@",getstr);
nsdictionary *responsedict = (nsdictionary *)responseobject;
success(responsedict);
} failure:^(afhttprequestoperation *operation, nserror *error) {
if (!operation.responseobject) {
nslog(@"网络错误");
}
error( operation,error);
}];
}
+ (void)uploadimage:(nsstring *)url
params:(nsdictionary *)params
uploadimage:(uiimage *)image
success:(void (^)(id response))success
failure:(void (^)(afhttprequestoperation *operation,nserror *error))error
{
// 创建请求管理者
afhttprequestoperationmanager *manager = [afhttprequestoperationmanager manager];
manager.requestserializer = [afjsonrequestserializer serializer];
manager.responseserializer = [afjsonresponseserializer serializer];
manager.requestserializer.timeoutinterval = 30;
// [manager.requestserializer setvalue:@"application/json" forhttpheaderfield:@"content-type"];
//
// [manager.requestserializer setvalue:@"application/json" forhttpheaderfield:@"accept"];
nsstring *poststr = [nsstring stringwithformat:@"%@%@", serverurl,url] ;
nsmutabledictionary *dict = [params mutablecopy];
[manager post:poststr parameters:dict constructingbodywithblock:^(id<afmultipartformdata> formdata) {
nsdata *imagedata = uiimagejpegrepresentation(image, 0.1);
[formdata appendpartwithfiledata:imagedata name:@"img" filename:@"head.jpg" mimetype:@"image/jpeg"];
} success:^(afhttprequestoperation *operation, id responseobject) {
nsdictionary *responsedict = (nsdictionary *)responseobject;
success(responsedict);
} failure:^(afhttprequestoperation *operation, nserror *error) {
error( operation,error);
}];
}
|
效果:


以上就是本文的全部内容,希望对大家的学习有所帮助。








发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。