首頁 > 軟體

iOS搭建簡易購物車頁面

2022-08-08 14:02:06

本文範例為大家分享了iOS實現簡單購物車頁面的搭建,供大家參考,具體內容如下

1.基礎頁面的搭建

  • 在storyboard的cell中建立控制元件並進行約束,繼承自定義的AZWineCell
  • 將cell中的子控制元件和自定義的AZWineCell一一進行連線
@property (weak, nonatomic) IBOutlet UIImageView *iconView;
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UILabel *priceLabel;
@property (weak, nonatomic) IBOutlet UILabel *countLabel;
@property (weak, nonatomic) IBOutlet AZWineButton *minusBtn;
  • 讓商品的增加和刪減按鈕繼承於自定義的按鈕,實現自定義樣式
-(void)awakeFromNib
{
    self.layer.borderWidth=1;
    self.layer.borderColor=[UIColor orangeColor].CGColor;
    self.layer.cornerRadius=self.frame.size.width*0.5;
}

2.載入模型資料

  • 這裡使用懶載入的方式載入資料
-(NSMutableArray *)wineArray
{
    if (!_wineArray) {
        // 獲得路徑
        NSString *path=[[NSBundle mainBundle]pathForResource:@"wine.plist" ofType:nil];
        // 獲得陣列
        NSArray *array=[NSArray arrayWithContentsOfFile:path];
        // 建立一個臨時陣列存放模型資料
        NSMutableArray *tempArray=[NSMutableArray array];
        // 新增模型
        for (NSDictionary *dict in array) {
            //字典轉模型
            AZWine *wine=[AZWine wineWithDict:dict];
            // 實現對wine模型內num值變化的監聽
            [wine addObserver:self forKeyPath:@"num" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
            [tempArray addObject:wine];
        }
        _wineArray=tempArray;

    }
    return _wineArray;;
}
  • 給cell繫結模型資料,在模型的set方法給cell注入資料
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 繫結標識
    static NSString *ID=@"wine";
    // 建立cell
    AZWineCell *cell=[tableView dequeueReusableCellWithIdentifier:ID];
    // 給cell注入資料
    cell.wine=self.wineArray[indexPath.row];
    // 返回cell
    return cell;
}
-(void)setWine:(AZWine *)wine
{
    _wine=wine;

    self.iconView.image=[UIImage imageNamed:wine.image];
    self.nameLabel.text=wine.name;
    self.priceLabel.text=wine.money;
    self.countLabel.text=[NSString stringWithFormat:@"%zd",wine.num];
    self.minusBtn.enabled=(wine.num>0);

}

3.設定代理,實現對按鈕點選事件的監聽

  • 自定義協定,提供協定方法供代理呼叫,監聽按鈕的點選
@protocol AZWineCellDelegate <NSObject>

@optional
/*增加商品按鈕的點選*/
-(void)wineCellDidClickPlusButton:(AZWineCell *)cell;
/*刪減商品按鈕的點選*/
-(void)wineCellDidClickMinusButton:(AZWineCell *)cell;
@end

@interface AZWineCell : UITableViewCell
/*模型*/
@property(nonatomic,strong)AZWine *wine;
/*設定代理*/
@property(nonatomic, weak) id<AZWineCellDelegate> delegate;

@end
  • 修改模型資料,修改介面,通知代理實現協定方法
- (IBAction)minusClick {
    // 修改模型
    self.wine.num--;
    // 修改介面
    self.countLabel.text=[NSString stringWithFormat:@"%zd",self.wine.num];
    // 按鈕是否可以點選
    if (self.wine.num==0) {
        self.minusBtn.enabled=NO;
    }
    // 通知代理
    if([self.delegate respondsToSelector:@selector(wineCellDidClickMinusButton:)]){
        [self.delegate wineCellDidClickMinusButton:self];
    }

}
- (IBAction)plusClick {
    // 修改模型
    self.wine.num++;
    // 修改介面
    self.countLabel.text=[NSString stringWithFormat:@"%zd",self.wine.num];
    // 按鈕是否可以點選
    self.minusBtn.enabled=YES;
    // 通知代理
    if ([self.delegate respondsToSelector:@selector(wineCellDidClickPlusButton:)]) {
        [self.delegate wineCellDidClickPlusButton:self];
    }
}
  • 實現協定方法,完成總價的重新整理
-(void)wineCellDidClickPlusButton:(AZWineCell *)cell
{
    // 計算總價
    int totalPrice=self.totalPriceView.text.intValue+cell.wine.money.intValue;
    // 重新整理介面
    self.totalPriceView.text=[NSString stringWithFormat:@"%d",totalPrice];
    // 購買按鈕
    self.purchaseBtn.enabled=YES;
    // 購物車
    if (![self.shoppingList containsObject:cell.wine]) {
        [self.shoppingList addObject:cell.wine];
    }

}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com