123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515 |
- //
- // ASEditAddressViewController.m
- // Asteria
- //
- // Created by iOS on 2024/5/8.
- //
- #import "ASEditAddressViewController.h"
- #import "ASAddressViewModel.h"
- #import "InTableScrollView.h"
- #import "KWTextField.h"
- #import <BRPickerView/BRPickerView.h>
- @interface ASEditAddressViewController () <UITextFieldDelegate>
- @property (nonatomic, strong) ASAddressViewModel *vm;
- @property (nonatomic, strong) InTableScrollView *scrollV;
- @property (nonatomic, strong) UIStackView *totalStackV;
- @property (nonatomic, strong) NSMutableArray<KWTextField *> *tfArr;
- @property (nonatomic, strong) NSMutableArray<UILabel *> *errLbArr;
- @property (nonatomic, strong) NSArray<NSString *> *placeHoldArr;
- @property (nonatomic, strong) NSArray<NSString *> *errDesArr;
- @property (nonatomic, strong) UIButton *billTypeBt;
- @property (nonatomic, strong) UIButton *shipTypeBt;
- @property (nonatomic, strong) UIButton *saveBt;
- @property (nonatomic, strong) UIButton *deletBt;
- @end
- @implementation ASEditAddressViewController
- -(ASAddressViewModel *)vm {
- if (!_vm) {
- _vm = [ASAddressViewModel new];
- }
- return _vm;
- }
- - (instancetype)init {
- self = [super init];
- if (self) {
- __weak typeof(self) weakSelf = self;
- [self.vm getCountryList:^{
- [weakSelf.vm getProvinceList:weakSelf.m.country_id success:^{}];
- }];
- }
- return self;
- }
- - (void)viewDidLoad {
- [super viewDidLoad];
-
- [self setUI];
- if (self.isEdit) {
- [self setTitle:@"EDIT ADDRESS"];
-
- [self.vm getProvinceList:self.m.country_id success:^{}];
- [self setEditDefualtData];
-
-
- } else {
- if (!self.m) {
- self.m = [ASAddressModel defualtData];
- } else {
- [self.vm getProvinceList:self.m.country_id success:^{}];
- [self setEditDefualtData];
- }
- [self setTitle: @"NEW ADDRESS"];
- _deletBt.hidden = true;
- }
- if(self.isCartEdit){
- [self.saveBt setTitle:@"SAVE AND APPLY" forState:UIControlStateNormal];
- }
- }
- #pragma mark - **************** EditAddressTypeShippingNewAddress ****************
- - (void)xxx_tengteng_confignavBarBar{
- self.navigationController.navigationBar.hidden = YES;
- UIButton *closeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [closeBtn setImage:[UIImage imageNamed:@"login_close_black"] forState:UIControlStateNormal];
- [closeBtn addTarget:self action:@selector(xxx_closeVC) forControlEvents:UIControlEventTouchUpInside];
- [self.view addSubview:closeBtn];
- NSInteger top = IPHONEX ? 44 : 20;
- closeBtn.frame = CGRectMake((KScreenWidth -44)/2, top, 44, 44);
-
- IPhoneXHeigh
- [self.scrollV mas_remakeConstraints:^(MASConstraintMaker *make) {
- make.left.right.equalTo(self.view);
- make.top.mas_equalTo(securitytop_Y +10);
- make.height.mas_equalTo(security_H -10);
- }];
- }
- #pragma mark - **************** handle 触发事件****************
- -(void)xxx_closeVC{
- [self dismissViewControllerAnimated:YES completion:nil];
- }
- - (void)setEditDefualtData {
- NSArray<NSString *> *arr = @[STR(self.m.firstname),
- STR(self.m.lastname),
- STR(self.m.street.firstObject),
- STR(self.m.postcode),
- STR(self.m.city),
- STR(self.m.country),
- STR(self.m.region.region),
- STR(self.m.telephone)
- ];
-
- for (int i= 0 ; i<arr.count; i++) {
- if (self.tfArr.count > i) {
- self.tfArr[i].text = arr[i];
- }
- }
- _billTypeBt.selected = false;
- _shipTypeBt.selected = false;
- switch (self.m.addressType) {
- case 1:
- [_billTypeBt setSelected:true];
- break;
- case 2:
- [_shipTypeBt setSelected:true];
- break;
- case 3:
- [_shipTypeBt setSelected:true];
- [_billTypeBt setSelected:true];
- default:
- break;
- }
-
- }
- - (void)setData {
- self.placeHoldArr = @[@"* FIRST NAME",
- @"* LAST NAME",
- @"* ADDRESS (NO ACCEPTING P0.BOX)",
- @"* ZIP/POSTAL CODE",
- @"* CITY",
- @"* COUNTY",
- @"* STATE/PROVINCE",
- @"* TELEPHONE"];
- self.errDesArr = @[@"*This Is Mandatory",
- @"*This Is Mandatory",
- @"*This Is Mandatory",
- @"*This Is Mandatory",
- @"*This Is Mandatory",
- @"*This Is Mandatory",
- @"*This Is Mandatory",
- @"*This Is Mandatory"];
-
- }
- - (void)setUI {
- self.tfArr = [NSMutableArray array];
- self.errLbArr = [NSMutableArray array];
- [self setData];
- [self.view addSubview:self.scrollV];
- IPhoneXHeigh
- [self.scrollV mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.right.equalTo(self.view);
- make.top.mas_equalTo(securitytop_Y);
- // make.top.equalTo(self.customNavBar.mas_bottom);
- make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom);
- }];
-
-
-
- UIStackView *tStackV = [[UIStackView alloc] init];
- tStackV.axis = UILayoutConstraintAxisVertical;
- tStackV.alignment = UIStackViewAlignmentFill;
- tStackV.distribution = UIStackViewDistributionFill;
- tStackV.spacing = 16;
- self.totalStackV = tStackV;
-
- UIStackView *topStackV = [[UIStackView alloc] init];
- topStackV.axis = UILayoutConstraintAxisHorizontal;
- topStackV.alignment = UIStackViewAlignmentFill;
- topStackV.distribution = UIStackViewDistributionFillEqually;
- topStackV.spacing = 20;
- [self.totalStackV addArrangedSubview:topStackV];
-
- [self.tfArr removeAllObjects];
- [self.errLbArr removeAllObjects];
- for (int i = 0; i<self.placeHoldArr.count; i++) {
- UIView *v = [UIView new];
- v.backgroundColor = [UIColor clearColor];
- UILabel *lb = [[UILabel alloc] init];
- lb.font = [UIFont fontWithName:Rob_Regular size:12];
- lb.textColor = [UIColor colorWithHexString:@"#E60013"];
- lb.textAlignment = NSTextAlignmentCenter;
- lb.tag = 70000 + i;
- KWTextField *tf = [[KWTextField alloc] init];
- tf.tag = 90000 + i;
- if (i == 5 || i == 6) {
- tf.delegate = self;
- }
- [v addSubview:tf];
- [v addSubview:lb];
- UIStackView *stackV = [[UIStackView alloc] init];
- stackV.axis = UILayoutConstraintAxisVertical;
- stackV.alignment = UIStackViewAlignmentFill;
- stackV.distribution = UIStackViewDistributionFill;
- stackV.spacing = 0;
- [stackV addArrangedSubview:v];
- lb.text = self.errDesArr[i];
- lb.hidden = true;
- tf.placeholder = self.placeHoldArr[i];
- [v mas_makeConstraints:^(MASConstraintMaker *make) {
- make.height.equalTo(@59);
- }];
- [tf mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.top.right.equalTo(v);
- make.height.equalTo(@45);
- }];
- [lb mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.bottom.right.equalTo(v);
- make.height.equalTo(@14);
- }];
- if (i == 0 || i == 1) {
- [topStackV addArrangedSubview:stackV];
- } else {
- [self.totalStackV addArrangedSubview:stackV];
- }
- [self.tfArr addObject:tf];
- [self.errLbArr addObject:lb];
- }
-
- [self.scrollV addSubview:self.totalStackV];
- [self.totalStackV mas_makeConstraints:^(MASConstraintMaker *make) {
- make.top.equalTo(self.scrollV).offset(20);
- make.left.equalTo(self.scrollV).offset(20);
- make.right.equalTo(self.view).offset(-20);
- make.bottom.equalTo(self.scrollV).offset(-20);
- make.width.equalTo([NSNumber numberWithFloat:KScreenWidth-40]);
- }];
-
-
- NSMutableArray *btArr = [[NSMutableArray alloc]init];
- if(self.isCartEdit){
- // [btArr addObjectsFromArray:@[self.saveBt]];
- [btArr addObjectsFromArray:@[self.billTypeBt, self.shipTypeBt, self.saveBt]];
- }else{
- [btArr addObjectsFromArray:@[self.billTypeBt, self.shipTypeBt, self.saveBt, self.deletBt]];
- }
- for (UIButton *bt in btArr) {
- UIView * v = [UIView new];
- v.backgroundColor = [UIColor clearColor];
- [v addSubview:bt];
- [self.totalStackV addArrangedSubview:v];
- [v mas_makeConstraints:^(MASConstraintMaker *make) {
- make.height.equalTo(bt == self.saveBt ? @45 : @30);
- }];
- [bt mas_makeConstraints:^(MASConstraintMaker *make) {
- make.top.left.bottom.equalTo(v);
- if (bt == self.saveBt || bt == self.deletBt) {
- make.right.equalTo(v);
- } else {
- }
- }];
-
- }
-
-
-
- }
- - (InTableScrollView *)scrollV {
- if (!_scrollV) {
- InTableScrollView *v = [[InTableScrollView alloc] init];
- v.showsVerticalScrollIndicator = false;
- v.showsHorizontalScrollIndicator = false;
- v.alwaysBounceVertical = true;
- v.backgroundColor = [UIColor whiteColor];
- _scrollV = v;
- }
- return _scrollV;
- }
- - (UIButton *)billTypeBt {
- if (!_billTypeBt) {
- UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
- [bt setImage:[UIImage imageNamed:@"login_selectRido"] forState:UIControlStateNormal];
- [bt setImage:[UIImage imageNamed:@"login_selectRido_select"] forState:UIControlStateSelected];
- [bt setTitle:@" SET TO THE DEFAULT BILLING ADDRESS" forState:UIControlStateNormal];
- bt.titleLabel.font = [UIFont fontWithName:Rob_Regular size:12];
- bt.selected = false;
- [bt setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
- [bt addTarget:self action:@selector(typeButtonAction:) forControlEvents:UIControlEventTouchUpInside];
- _billTypeBt = bt;
- }
- return _billTypeBt;
- }
- - (UIButton *)shipTypeBt {
- if (!_shipTypeBt) {
- UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
- [bt setImage:[UIImage imageNamed:@"login_selectRido"] forState:UIControlStateNormal];
- [bt setImage:[UIImage imageNamed:@"login_selectRido_select"] forState:UIControlStateSelected];
- [bt setTitle:@" SET TO THE DEFAULT SHIPPING ADDRESS" forState:UIControlStateNormal];
- bt.titleLabel.font = [UIFont fontWithName:Rob_Regular size:12];
- bt.selected = false;
- [bt setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
- [bt addTarget:self action:@selector(typeButtonAction:) forControlEvents:UIControlEventTouchUpInside];
- _shipTypeBt = bt;
- }
- return _shipTypeBt;
- }
- - (void)typeButtonAction:(UIButton *)bt {
- if ([bt isEqual:self.billTypeBt]) {
- self.billTypeBt.selected = !self.billTypeBt.isSelected;
- }
- if ([bt isEqual:self.shipTypeBt]) {
- self.shipTypeBt.selected = !self.shipTypeBt.selected;
-
- }
- }
- - (UIButton *)saveBt {
- if (!_saveBt) {
- UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
- [bt setTitle:@"Save" forState:UIControlStateNormal];
- bt.titleLabel.font = [UIFont fontWithName:Rob_Regular size:16];
- [bt setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
- [bt setBackgroundColor:[UIColor colorWithHexString:@"#000000"]];
- bt.layer.cornerRadius = 4;
- bt.layer.masksToBounds = true;
- // bt.enabled = true;
- [bt addTarget:self action:@selector(bottomBtAction) forControlEvents:UIControlEventTouchUpInside];
- _saveBt = bt;
- }
- return _saveBt;
- }
- - (void)bottomBtAction {
- [self uploadData];
- }
- - (UIButton *)deletBt {
- if (!_deletBt) {
- UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
- NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] initWithString:@"Delete"];
- [attStr addAttributes:@{
- NSFontAttributeName:[UIFont fontWithName:Rob_Regular size:14],
- NSUnderlineStyleAttributeName:@(NSUnderlineStyleSingle),
- NSUnderlineColorAttributeName:[UIColor colorWithHexString:@"#0B0B0B"]
- } range:[attStr.string rangeOfString:attStr.string]];
- [attStr setColor:[UIColor colorWithHexString:@"#0B0B0B"]];
- [bt setAttributedTitle:attStr forState:UIControlStateNormal];
- [bt addTarget:self action:@selector(deleteBtAction) forControlEvents:UIControlEventTouchUpInside];
- _deletBt = bt;
- }
- return _deletBt;
- }
- -(void)deleteBtAction {
- [MBProgressHUD showHUDAddedTo:self.view animated:true];
- @weakify(self);
- [self.vm deleteAnAddress:self.m complate:^(BOOL flag, NSString *msg) {
- [MBProgressHUD hideHUDForView:weak_self.view animated:true];
- NSString *str = flag ? @"Successed" : [NSString stringWithFormat:@"Faild, %@", msg];
- [weak_self.view makeToast:[NSString stringWithFormat:@"Delete %@", str]];
- if (flag) {
-
- [weak_self.navigationController popViewControllerAnimated:true];
- }
- }];
- }
- - (void)uploadData {
- BOOL hadError = false;
- for (int i = 0; i<self.tfArr.count; i++) {
- NSString *text = self.tfArr[i].text;
- if (text && ![text isEqualToString:@""]) {
- self.errLbArr[i].hidden = true;
- switch (i) {
- case 0:
- self.m.firstname = text;
- break;
- case 1:
- self.m.lastname = text;
- break;
- case 2:
- self.m.street = [NSArray arrayWithObject: text];
- break;
- case 3:
- self.m.postcode = text;
- break;
- case 4:
- self.m.city = text;
- break;
- case 5:
- self.m.country = text;
- break;
- case 6:
- self.m.region.region = text;
- break;
- case 7:
- self.m.telephone = text;
- break;
-
- default:
- break;
- }
- } else {
- hadError = true;
- self.errLbArr[i].hidden = false;
- }
- }
-
- if (self.billTypeBt.isSelected) {
- self.m.addressType = 1;
- }
- if (self.shipTypeBt.isSelected) {
- self.m.addressType = 2;
- }
- if ((self.shipTypeBt.isSelected && self.billTypeBt.isSelected) || self.isCartEdit){
- self.m.addressType = 3;
- }
- if (hadError) {
- return;
- }
- [MBProgressHUD showHUDAddedTo:self.view animated:true];
- __weak typeof(self) weak_self = self;
- [self.vm upAddress:self.m complate:^(BOOL success, NSString * _Nonnull addressid) {
- [MBProgressHUD hideHUDForView:weak_self.view animated:true];
- if (success) {
- [weak_self.view makeToast:@"Edit Successed"];
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1.5), dispatch_get_main_queue(), ^{
- if (weak_self.isCartEdit && weak_self.saveSuccess) {
- weak_self.saveSuccess(self.m);
- }
- [weak_self.navigationController popViewControllerAnimated:true];
- });
- } else {
- [weak_self.view makeToast:addressid];
- }
-
- }];
-
- }
- - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
- [self.view endEditing:true];
- NSInteger tag = textField.tag-90000;
- if (tag == 5) {//country
- NSInteger index = 0;
- for (int i=0;i<self.vm.countryArr.count; i++) {
- KWCountryAddressModel *item = self.vm.countryArr[i];
- if (item.country_id == self.m.country_id) {
- index = i;
- }
- }
- @weakify(self);
- [BRStringPickerView showPickerWithTitle:@"Select Country" dataSourceArr:self.vm.countryNameList selectIndex:index resultBlock:^(BRResultModel * _Nullable resultModel) {
- KWCountryAddressModel *item = weak_self.vm.countryArr[resultModel.index];
- weak_self.tfArr[6].text = @"";
- textField.text = item.full_name_english;
- weak_self.m.country = item.full_name_english;
- weak_self.m.country_id = item.country_id;
- weak_self.m.region = [ASAddressReginModel new];
- weak_self.m.region.region = @"";
- weak_self.m.region.region_id = @"";
- weak_self.m.region.region_code = @"";
- weak_self.m.region_id = @"";
- [weak_self.vm getProvinceList:item.country_id success:^{}];
-
- }];
- }
- if (tag == 6) {// province
- if (self.m.country_id && ![self.m.country_id isEqualToString:@""]) {
-
- if (self.vm.hadGetProvince && self.vm.provinceArr.count > 0) {
- [self showProvincePick];
- } else {
- return true;
- }
- } else {
- [self.view makeToast:@"Please Select Country First"];
- }
- }
- return false;
- }
- - (void)showProvincePick {
- NSInteger index = 0;
- for (int i=0;i<self.vm.provinceArr.count; i++) {
- KWProvinceAddressModel *item = self.vm.provinceArr[i];
- if (item.Id == self.m.region_id) {
- index = i;
- }
- }
- @weakify(self);
- [BRStringPickerView showPickerWithTitle:@"Select Province" dataSourceArr:self.vm.provinceNameList selectIndex:index resultBlock:^(BRResultModel * _Nullable resultModel) {
- KWProvinceAddressModel *item = weak_self.vm.provinceArr[resultModel.index];
- weak_self.m.region.region = item.name;
- weak_self.m.region_id = item.Id;
- weak_self.tfArr[6].text = item.name;
- }];
- }
- @end
|