故事板控制器:

//
// XMGViewController.m
// 03-综合练习
//
// Created by xiaomage on 15/12/28.
// Copyright © 2015年 小码哥. All rights reserved.
// #import "XMGViewController.h"
#import "XMGShop.h"
#import "XMGShopView.h" @interface XMGViewController () // 购物车
@property (weak, nonatomic) IBOutlet UIView *shopCarView;
// 添加按钮
@property (weak, nonatomic) IBOutlet UIButton *addButton;
// 删除按钮
@property (weak, nonatomic) IBOutlet UIButton *removeButton; /** 数据数组 */
@property (nonatomic, strong) NSArray *dataArr;
@end @implementation XMGViewController
/**
* 懒加载
*/
- (NSArray *)dataArr{
if (_dataArr == nil) {
// 加载数据
// 1.获取全路径
NSString *dataPath = [[NSBundle mainBundle] pathForResource:@"shopData.plist" ofType:nil];
self.dataArr = [NSArray arrayWithContentsOfFile:dataPath];
// 字典转模型
// 创建临时数组
NSMutableArray *tempArray = [NSMutableArray array];
for (NSDictionary *dict in _dataArr) {
// 创建shop对象
XMGShop *shop = [XMGShop shopWithDict:dict];
// 把模型装入数组
[tempArray addObject:shop];
}
self.dataArr = tempArray;
}
return _dataArr;
} // 初始化数据
- (void)viewDidLoad {
[super viewDidLoad];
} /**
* 添加到购物车
*
* @param button 按钮
*/
- (IBAction)add:(UIButton *)button {
/***********************1.定义一些常量*****************************/
// 1.总列数
NSInteger allCols = ;
// 2.商品的宽度 和 高度
CGFloat width = ;
CGFloat height = ;
// 3.求出水平间距 和 垂直间距
CGFloat hMargin = (self.shopCarView.frame.size.width - allCols * width) / (allCols -);
CGFloat vMargin = (self.shopCarView.frame.size.height - * height) / ;
// 4. 设置索引
NSInteger index = self.shopCarView.subviews.count;
// 5.求出x值
CGFloat x = (hMargin + width) * (index % allCols);
CGFloat y = (vMargin + height) * (index / allCols); /***********************2.创建一个商品*****************************/ XMGShopView *shopView = [XMGShopView shopView];
shopView.frame = CGRectMake(x, y, width, height);
// 设置数据
shopView.shop = self.dataArr[index];//set方法
[self.shopCarView addSubview:shopView]; /***********************4.设置按钮的状态*****************************/ button.enabled = (index != ); // 5.设置删除按钮的状态
self.removeButton.enabled = YES; } /**
* 从购物车中删除
*
* @param button 按钮
*/
- (IBAction)remove:(UIButton *)button {
// 1. 删除最后一个商品
UIView *lastShopView = [self.shopCarView.subviews lastObject];
[lastShopView removeFromSuperview]; // 3. 设置添加按钮的状态
self.addButton.enabled = YES; // 4. 设置删除按钮的状态
self.removeButton.enabled = (self.shopCarView.subviews.count != ); }
@end

xib界面:

xib界面对应的类:

//
// XMGShopView.h #import <UIKit/UIKit.h>
@class XMGShop; @interface XMGShopView : UIView
/** 数据模型 */
@property (nonatomic, strong) XMGShop *shop; // 快速构造方法
+ (instancetype)shopView;
@end
//
// XMGShopView.m #import "XMGShopView.h"
#import "XMGShop.h" @interface XMGShopView () @property (weak, nonatomic) IBOutlet UIImageView *iconView;//跟xib界面连线了的
@property (weak, nonatomic) IBOutlet UILabel *titlelabel;//跟xib界面连线了的 @end @implementation XMGShopView + (instancetype)shopView{
//return [[[NSBundle mainBundle] loadNibNamed:@"XMGShopView" owner:nil options:nil] firstObject]; //XMGShopView是xib的名字
return [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:nil options:nil] firstObject];
} //- (void)awakeFromNib //加子控件 - (void)setShop:(XMGShop *)shop{
_shop = shop; // 设置界面图片和文字
self.iconView.image = [UIImage imageNamed:shop.icon];
self.titlelabel.text = shop.name;
}
@end

xib界面的数据bean类:

//
// XMGShop.h
// 03-综合练习
//
// Created by xiaomage on 15/12/29.
// Copyright © 2015年 小码哥. All rights reserved.
// #import <Foundation/Foundation.h> @interface XMGShop : NSObject /** 图片的名称 */
@property (nonatomic, copy) NSString *icon;
/** 商品的名称 */
@property (nonatomic, copy) NSString *name; // 提供构造方法
/*
- (instancetype)initWithIcon: (NSString *)icon name: (NSString *)name;
+ (instancetype)shopWithIcon: (NSString *)icon name: (NSString *)name;
*/ - (instancetype)initWithDict:(NSDictionary *)dict;
+ (instancetype)shopWithDict:(NSDictionary *)dict; @end
//
// XMGShop.m
// 03-综合练习
//
// Created by xiaomage on 15/12/29.
// Copyright © 2015年 小码哥. All rights reserved.
// #import "XMGShop.h" @implementation XMGShop
/*
- (instancetype)initWithIcon:(NSString *)icon name:(NSString *)name{
if (self = [super init]) {
self.icon = icon;
self.name = name;
}
return self;
} + (instancetype)shopWithIcon:(NSString *)icon name:(NSString *)name{
return [[self alloc] initWithIcon:icon name:name];
}
*/ - (instancetype)initWithDict:(NSDictionary *)dict{
if (self = [super init]) {
self.icon = dict[@"icon"];
self.name = dict[@"name"];
}
return self;
} + (instancetype)shopWithDict:(NSDictionary *)dict{
return [[self alloc] initWithDict:dict];
} @end

故事板:

最新文章

  1. ABP理论学习之数据传输对象(DTO)
  2. Linux_07------Linux的用户和用户组管理
  3. Windows Git+TortoiseGit简易使用教程
  4. HW7.7
  5. bzoj 1036 [ZJOI2008]树的统计Count(树链剖分,线段树)
  6. HDU 1074 Doing Homework (dp+状态压缩)
  7. ServiceBase 类
  8. Google Code Jam Round 1A 2015 Problem B. Haircut 二分
  9. React-Native 之 项目实战(二)
  10. 关于RFID2.4G 标签卡最新方案
  11. Excel 2010去掉网格线
  12. 【AtCoder】ARC074
  13. wxformbuilder在python如何使用
  14. 洛谷P4281 紧急会议
  15. 三剑客之awk
  16. Feature如何解决参数数量不匹配
  17. sqlserver2017安装及连接过程中发现的问题
  18. C站投稿映兔源的方法
  19. Kubelet资源预留
  20. C#基础语法补充

热门文章

  1. 原生j获取元素的几种方法
  2. vue 接口统一管理
  3. [Python3网络爬虫开发实战] 1.2.3-ChromeDriver的安装
  4. 在Linux中CSV转换成XLSX
  5. c++基础_回文数
  6. Pycharm下GitHub配置使用
  7. 如何使用JDK1.6 API
  8. 添物零基础到架构师(基础篇) - JavaScript
  9. CSU 1225 最长上升子序列并记录其个数
  10. [luoguP1082] 同余方程(扩展欧几里得)