优惠券功能总结
注:项目添加了优惠券功能,在此总结经验
界面主要是:UITableView
优惠卷的类型有4种,其中3种是样式相同,背景颜色不同,以下称为A1,A2,A3。另一种称为B。
开始的时候我是打算就用一个UITableViewCell
类来完成这4种样式的。但是只能在拿到数据之后才能知道具体类型,所以我在给cell赋值数据的API里面创建布局控件。其中使用了CAGradientLayer
和CAShapeLayer
。
出现了一个奇怪的显示问题。
问题:在cell的数量较少,不能被tableView复用的时候,显示正常。在cell的数量较多,tableView能复用cell的时候,子layer的路径会出现变化
--
我并没解决好这个问题。而是使用了另一个类来搭建B的样式。
--
后来我想了一下,用一个类来做也可以,使用两个注册cellID。
在 UITableViewCell
的 - initWithStyle:reuseIdentifier:
方法中
根据 cellID 来搭建不同的样式。
--
实现方法:
创建一个优惠券基类 : CouponBaseCell
A样式的优惠券 : ACouponBaseCell : CouponBasseCell
B样式的优惠券 : BCouponBaseCell : CouponBaseCell
CouponBaseCell
声明 优惠券的相应API
/// 给优惠券数据
- (void)setCoponData:(CouponInfo *)data;
/// 设置优惠券类型
- (void)setCoponType:(CouponType)type;
/// 设置优惠券状态
- (void)setCoponState:(CouponState)state;
声明一个点击优惠券的协议 Protocol
CouponBaseCellDelegate
///点击优惠券
- (void)didSelecteCoupon:(CouponBaseCell *)copon;
CouponBaseCell
添加一个遵守CouponBaseCellDelegate
协议的 id 类型的属性。
@property(nonatomic, weak) id <CouponBaseCellDelegate>delegate;
ACouponBaseCell
和BCouponBaseCell
分别根据对应的需求实现这些API