本文实例分享了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); }]; } |
效果:
以上就是本文的全部内容,希望对大家的学习有所帮助。