本實(shí)例直接從當(dāng)前項(xiàng)目中拉出來(lái),實(shí)現(xiàn)的功能簡(jiǎn)單侦另,但是在自己實(shí)現(xiàn)的時(shí)候用的代碼老多多秩命,而且當(dāng)前只接收兩組屬性,不過(guò)屬性實(shí)現(xiàn)了自動(dòng)向下布局褒傅,超出屏幕可以上下滑動(dòng)弃锐,但封裝性不強(qiáng),希望得到牛人指點(diǎn)樊卓。
下面簡(jiǎn)單介紹實(shí)現(xiàn)方法拿愧。
1.購(gòu)物車屬性選擇功能
購(gòu)物屬性選擇.gif
- 獲取物品屬性信息杠河,并將數(shù)據(jù)直接轉(zhuǎn)換為模型數(shù)據(jù)碌尔。
/**
* 獲取 商品屬性 數(shù)據(jù)
*/
- (void)getGoodAttrData {
NSString *URL = [NSString stringWithFormat:@"%@/App/Sylm/yclist",SERVERURL];
NSMutableDictionary *paramas = [NSMutableDictionary dictionary];
paramas[@"method"] = @"goods_attr";
paramas[@"goods_id"] = @"11";
[LXHttpTool post:URL params:paramas success:^(id json) {
NSLog(@"%@", json);
NSInteger status = [json[@"status"] integerValue];
if (status == 1) {
NSArray *goodAttrsArr = [GoodAttrModel mj_objectArrayWithKeyValuesArray:json[@"data"]];
self.goodAttrsArr = goodAttrsArr;
} else {
[SVProgressHUD showErrorWithStatus:@"暫無(wú)商品屬性" maskType:SVProgressHUDMaskTypeGradient];
}
} failure:^(NSError *error) {
[SVProgressHUD showErrorWithStatus:@"請(qǐng)重新加載" maskType:SVProgressHUDMaskTypeGradient];
NSLog(@"%@", error);
}];
}
- 傳遞數(shù)據(jù)模型,生成相應(yīng)的物品屬性按鈕券敌,其中主要用到的是for循環(huán)實(shí)現(xiàn)對(duì)按鈕的布局唾戚。代碼如下:
NSArray *attrValueArr0 = ((GoodAttrModel *)goodAttrsArr[0]).attr_value;
CGFloat one_btnsX = kBigMargin;
CGFloat one_btnY = CGRectGetMaxY(_firstAttributeLbl.frame) + kSmallMargin;
for (int i = 0; i < attrValueArr0.count ; i++) {
NSString *btnTittle = ((GoodAttrValueModel *)attrValueArr0[i]).attr_value;
CGSize size = [btnTittle sizeWithAttributes:[NSDictionary dictionaryWithObjectsAndKeys:kButtonTextFont, NSFontAttributeName, nil]];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setTitle:btnTittle forState:UIControlStateNormal];
btn.titleLabel.font=[UIFont boldSystemFontOfSize:13];
btn.tag = i;
[btn addTarget:self action:@selector(attrs1BtnClick:) forControlEvents:UIControlEventTouchUpInside];
btn.frame = CGRectMake(one_btnsX, one_btnY, size.width + 30, 35);
one_btnsX += kBigMargin + size.width + kBigMargin;
while (one_btnsX > kScreenW) {
one_btnsX = kBigMargin;
one_btnY += 45;
if ((one_btnsX + size.width + 30) > kScreenW) {
one_btnsX = kBigMargin;
break;
}
btn.frame = CGRectMake(one_btnsX, one_btnY, size.width + 30, 35);
one_btnsX += 15 + size.width + kBigMargin;
}
[btn defaultStyleWithNormalTitleColor:HX_RGB(136, 137, 138) andHighTitleColor:kWhiteColor andBorderColor:LXBorderColor andBackgroundColor:kWhiteColor andHighBgColor:kMAINCOLOR andSelectedBgColor:kMAINCOLOR withcornerRadius:2];
[self.scrollView addSubview:btn];
[self.firstBtnsArr addObject:btn];
}
- 通過(guò)Block來(lái)傳遞選中的屬性,如下:
@property (nonatomic, copy) void (^sureBtnsClick)(NSString *num, NSString *attr_id, NSString *goods_attr_value_1, NSString *goods_attr_value_2);
#pragma mark - 按鈕點(diǎn)擊事件
- (void)sureBtnClick {
// 購(gòu)買數(shù)量
NSString *num = self.buyNumsLbl.text;
// 屬性ID str
NSString *attr_id1 = [NSString stringWithFormat:@"%@-%@", _goods_attr_1, _goods_attr_value_1];
NSString *attr_id2 = [NSString stringWithFormat:@"%@-%@", _goods_attr_2, _goods_attr_value_2];
NSString *attr_id = [NSString stringWithFormat:@"%@|%@", attr_id1, attr_id2];
if (self.sureBtnsClick) {
self.sureBtnsClick(num, attr_id, self.goods_attr_value_1, self.goods_attr_value_2);
}
[self removeView];
}
2.購(gòu)物車功能
-
選擇待诅,刪除(+滑動(dòng)刪除)和收藏功能
其中大部分通過(guò)block來(lái)實(shí)現(xiàn)叹坦,涉及的邏輯有些繞,好亂卑雁,不過(guò)功能還是實(shí)現(xiàn)了募书。效果如下圖:
購(gòu)物車功能演示
3.訂單確認(rèn)頁(yè)面
- 實(shí)現(xiàn)購(gòu)物車選定商品之后,進(jìn)入訂單確認(rèn)支付頁(yè)面测蹲。
- 有三種支付方式:支付寶莹捡、微信和銀聯(lián)。
-
收貨地址選擇(未完成)扣甲。
效果圖如下:
訂單確認(rèn)
小結(jié):回頭研究下用SDAutoLayout來(lái)實(shí)現(xiàn)此種自動(dòng)布局篮赢,最近一直在體驗(yàn)此框架。
令附上Demo地址--->傳送門[Github],注:在此感謝朋友的閱讀启泣。