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

本文实例分享了iOS购物分类模块的实现方案,供大家参考,具体内容如下

启动
在AppDelegate中创建主视图控制器。

- (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,作为主视图控制器。
头文件如下:

@interface Basetabarcontroller : UITabBarController

@end

实现文件中主要做了2点:创建视图控制器ClassViewController,并将它设置到新创建的创建导航控制器中。

- (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];

}

主要的界面视图控制器定义:

@interface ClassViewController : UIViewController

@end

实现文件中:

- (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个接口

@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

实现文件:

#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);

  }];

}

效果:

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

(0)

相关推荐

  • 详解iOS开发中使用storyboard创建导航控制器的方法

    关于StoryBoard iOS5之后Apple提供了一种全新的方式来制作UI,那就是StoryBoard.简单理解来说,可以把StoryBoard看做是一组viewController对应的xib,以及它们之间的转换方式的集合.在StoryBoard中不仅可以看到每个ViewController的布局样式,也可以明确地知道各个ViewController之间的转换关系.相对于单个的xib,其代码需求更少,也由于集合了各个xib,使得对于界面的理解和修改的速度也得到了更大提升.减少代码量就是减少

  • iOS应用开发中导航栏按钮UIBarButtonItem的添加教程

    1.UINavigationController导航控制器如何使用 UINavigationController可以翻译为导航控制器,在iOS里经常用到. 我们看看它的如何使用: 下面的图显示了导航控制器的流程.最左侧是根视图,当用户点击其中的General项时 ,General视图会滑入屏幕:当用户继续点击Auto-Lock项时,Auto-Lock视图将滑入屏幕.相应地,在对象管理上,导航控制器使用了导航堆栈.根视图控制器在堆栈最底层,接下来入栈的是General视图控制器和Auto-Lock

  • iOS开发中导航控制器的基本使用教程

    多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个view时,可以用一个大的view去管理1个或者多个小view,控制器也是如此,用1个控制器去管理其他多个控制器 比如,用一个控制器A去管理3个控制器B.C.D.控制器A被称为控制器B.C.D的"父控制器":控制器B.C.D的被称为控制器A的"子控制器" 为了便于管理控制器,iOS提供了2个

  • 如何使用jQuery技术开发ios风格的页面导航菜单

    效果图: 目前市场上越来越流行IOS风格的操作系统和导航方式,在今天的jQuery教程中,我们介绍如何生成一个iphone风格的菜单导航. HTML代码 我们使用镶嵌的<li>来生成菜单内容,并且包含在<nav>标签中,如下: <nav> <h1>导航菜单</h1> <ul> <li> <h2>专题教程</h2> <ul> <li> <h3>HTML专题教程<

  • iOS实现顶部标签式导航栏及下拉分类菜单

    本文实例为大家分享了iOS实现顶部标签式导航栏及下拉分类菜单的全部过程,供大家参考,具体内容如下 当内容及分类较多时,往往采用顶部标签式导航栏,例如网易新闻客户端的顶部分类导航,最近刚好有这样的应用场景,参考网络上一些demo,实现了这种导航效果,记录一些要点. 效果图(由于视频转GIF掉帧,滑动和下拉动画显得比较生硬,刚发现quickTime可以直接录制手机视频,推荐一下,很方便) 1.顶部标签式导航栏 (1)实现思路 其实就是在上下两个UIScrollView上做文章,实现联动选择切换的效果

  • IOS仿今日头条滑动导航栏

    之前在我们平台给大家分享了网易首页导航封装类.网易首页导航封装类优化,今天在前两个的基础上仿下今日头条. 1.网易首页导航封装类中主要解决了上面导航的ScrollView和下面的页面的ScrollView联动的问题,以及上面导航栏的便宜量. 2.网易首页导航封装类优化中主要解决iOS7以上滑动返回功能中UIScreenEdgePanGestureRecognizer与ScrollView的滑动的手势冲突问题. 今天仿今日头条滑动导航和网易首页导航封装类优化相似,这个也是解决手势冲突,UIPanG

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

    本文实例分享了iOS购物分类模块的实现方案,供大家参考,具体内容如下 启动 在AppDelegate中创建主视图控制器. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. self.window = [[

  • javaweb图书商城设计之分类模块(2)

    这篇文章内容简短,主要介绍了javaweb图书商城中的分类模块,具体内容如下 分类模块的相关类创建 cn.itcast.bookstore.category    domain:Category    dao:CategoryDao    service:CategoryService    web.servlet:CategoryServlet 查询所有分类 流程:main.jsp(<iframe>) -> CategoryService#findAll() -> left.js

  • Android购物分类效果实现

    本文实例为大家分享了Android购物分类效果展示的具体代码,供大家参考,具体内容如下 SecondActivity.java public class SecondActivity extends AppCompatActivity{ private ViewPager mPager; private RadioGroup mRadioGroup; @Override protected void onCreate(@Nullable Bundle savedInstanceState) {

  • IOS中判断卡顿的方案总结

    FPS FPS (Frames Per Second) 是图像领域中的定义,表示每秒渲染帧数,通常用于衡量画面的流畅度,每秒帧数越多,则表示画面越流畅,60fps 最佳,一般我们的APP的FPS 只要保持在 50-60之间,用户体验都是比较流畅的. 监测FPS也有好几种,这里只说最常用的方案,我最早是在YYFPSLabel中看到的.实现原理实现原理是向主线程的RunLoop的添加一个commonModes的CADisplayLink,每次屏幕刷新的时候都要执行CADisplayLink的方法,所

  • 浅析iOS中视频播放的几种方案

    1.AVPlayer (1) 优缺点 优点:可以自定义 UI, 进行控制 缺点:单纯的播放,没有控制 UI(进度,暂停,播放等按钮),而且如果要显示播放界面, 需要借助AVPlayerLayer, 添加图层到需要展示的图层上 (2)实现远程视频播放 实现播放功能(只有声音) 1.导入框架 #import <AVFoundation/AVFoundation.h> 2.通过远程 URL 创建 AVPlayer 对象 NSURL *remoteURL = [NSURL URLWithString:

  • Android仿京东分类模块左侧分类条目效果

    本文实例为大家分享了Android仿京东左侧分类条目效果的具体代码,供大家参考,具体内容如下 import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.TextView; import com.frame.R;

  • iOS应用开发中StoryBoard搭建UI界面的基本使用讲解

    StoryBoard 的本质 StoryBoard 是苹果在 iOS 5 中引入的新技术方案,目的是给纷繁复杂的 nib.xib 们一个温暖的家,让他们之间的关系更直观地展示出来,并提供了一种新的页面间跳转方式 segue. StoryBoard 的本质是一个 XML 文件,描述了若干窗体.组件.Auto Layout 约束等关键信息.示例文件:https://github.com/johnlui/AutoLayout/blob/master/AutoLayout/Base.lproj/Main

  • javaweb图书商城设计之图书模块(4)

    本文接着上一篇图书商城分类模块进行学习,供大家参考,具体内容如下 1.创建相关类 cn.itcast.bookstore.book domain:Book dao:BookDao service :BookService web.servle:BookServlet Book public class Book { private String bid; private String bname; private double price; private String author; priv

  • ES6新特性之模块Module用法详解

    本文实例讲述了ES6新特性之模块Module用法.分享给大家供大家参考,具体如下: 一.Module简介 ES6的Class只是面向对象编程的语法糖,升级了ES5的构造函数的原型链继承的写法,并没有解决模块化问题.Module功能就是为了解决这个问题而提出的. 历史上,JavaScript一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来.其他语言都有这项功能. 在ES6之前,社区制定了一些模块加载方案,最主要的有CommonJS和AMD两种.前者用

  • jQuery模仿京东/天猫商品左侧分类导航菜单效果

    现在天猫或者京东商品分类模块的默认的效果是这样的: 当鼠标滑过任意一栏导航分类时,就会出现相关详细分类模块,例如: 当鼠标移出蓝色框以外的区域,就会恢复默认的效果显示!然而使用jQuery的鼠标滑过事件,用得比较多的就是mouseover()和mouseout(),或者是他们两个的整合hover();所以之前我也是用的这种方法,但是一直调整都调整不到想要的效果!后来灵光一现,想着使用一下mouseenter()和mouseleave();结果分分钟想要的效果就出来了! 我的布局大致是这样的: <

随机推荐