iOS购物分类模块的实现方案

时间:2022-09-19 17:27:07

本文实例分享了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);
       
  }];
   
   
   
}

效果:

iOS购物分类模块的实现方案

iOS购物分类模块的实现方案

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