| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535 | ////  ASInfomationSetController.m//  Asteria////  Created by iOS on 2023/7/5.//#import "ASInfomationSetController.h"#import "KWTextField.h"#import <BRPickerView/BRPickerView.h>#import "ASHomeAlertWindow.h"@interface ASInfomationSetController () <UITextFieldDelegate>/// 0: 只有邮箱   1: 邮箱加密码        2: 邮箱+验证码+密码  3 邮箱+验证码@property (nonatomic,assign) NSInteger showType;@property (nonatomic, strong) UIScrollView *scrollV;@property (nonatomic, strong) UIStackView *totalStackV;@property (nonatomic, strong) KWTextField *lastNTf;@property (nonatomic, strong) KWTextField *nameTf;@property (nonatomic, strong) KWTextField *birthTf;@property (nonatomic, strong) UIStackView *passStackV;@property (nonatomic, strong) UIButton *changePassBt;@property (nonatomic, strong) KWTextField *emailTf;@property (nonatomic, strong) KWTextField *oldPassTf;@property (nonatomic, strong) KWTextField *nPassTf;@property (nonatomic, strong) UIButton *bottomBt;@property (nonatomic, strong) NSDate *currentDate;//@property (nonatomic, strong) KWInfoSettingViewModel *vm;@end@implementation ASInfomationSetController- (void)viewDidLoad {    [super viewDidLoad];//    self.vm = [KWInfoSettingViewModel new];    self.titleStr = @"Information";    [self setNavRightSearch:^{            }];        self.statusBgV.backgroundColor = Col_FFF;    self.customNavBar.backgroundColor = Col_FFF;        [self loadSubVs];        [self setData];    }- (void)setData {    ASUserModel *m = ASUserInfoManager.shared.userInfo;    NSString *bob = ASUserInfoManager.shared.birthDay;    self.lastNTf.text = m.lastname;    self.nameTf.text = m.firstname;    self.currentDate = [NSDate dateWithString:bob format:@"MM dd, yyyy"];    self.birthTf.text = [self.currentDate stringWithFormat:@"MM/dd/yyyy"];        self.showType = 0;        self.emailTf.text = m.email;    [self configViewsByShowType];    }- (void)loadSubVs {        [self.view addSubview:self.scrollV];            UIStackView *tStackV = [[UIStackView alloc] init];    tStackV.axis = UILayoutConstraintAxisVertical;    tStackV.alignment = UIStackViewAlignmentFill;    tStackV.distribution = UIStackViewDistributionFill;    tStackV.spacing = 20;    self.totalStackV = tStackV;        UIStackView *topStackV = [[UIStackView alloc] init];    topStackV.axis = UILayoutConstraintAxisHorizontal;    topStackV.alignment = UIStackViewAlignmentFill;    topStackV.distribution = UIStackViewDistributionFillEqually;    topStackV.spacing = 20;    [self.totalStackV addArrangedSubview:topStackV];        NSArray *titles = @[@"First Name", @"Last Name", @"Date Of Birth"];    NSArray *placeHolders = @[@"Pleace Input Name", @"Pleace Input Last Name", @"Pleace Select Date Of Birth"];    for (int i = 0; i<titles.count; i++) {        UILabel *lb = [[UILabel alloc] init];        lb.font = [UIFont fontWithName:Rob_Regular size:12];        lb.textColor = UIColor.blackColor;        KWTextField *tf = [[KWTextField alloc] init];        UIStackView *stackV = [[UIStackView alloc] init];        stackV.axis = UILayoutConstraintAxisVertical;        stackV.alignment = UIStackViewAlignmentFill;        stackV.distribution = UIStackViewDistributionFill;        stackV.spacing = 5;        [stackV addArrangedSubview:lb];        [stackV addArrangedSubview:tf];//        lb.text = titles[i];        tf.placeholder = placeHolders[i];        [lb mas_makeConstraints:^(MASConstraintMaker *make) {            make.height.equalTo(@5);        }];        [tf mas_makeConstraints:^(MASConstraintMaker *make) {            make.height.equalTo(@45);        }];        if (i == 0 || i == 1) {            [topStackV addArrangedSubview:stackV];        } else {            [self.totalStackV addArrangedSubview:stackV];        }        switch (i) {            case 0: {                self.nameTf = tf;                break;            }            case 1: {                self.lastNTf = tf;                break;            }            case 2: {                self.birthTf = tf;                break;            }            default:                break;        }    }        UIStackView *pStackV = [[UIStackView alloc] init];    pStackV.axis = UILayoutConstraintAxisVertical;    pStackV.alignment = UIStackViewAlignmentFill;    pStackV.distribution = UIStackViewDistributionFillEqually;    pStackV.spacing = 20;    self.passStackV = pStackV;            NSArray *titleArr = @[@"Email",@"",@""];    NSArray *placeArr = @[@"Place Input Email",@"* OLD Password",@"* New Password"];    for (int i=0; i<titleArr.count; i++) {        KWTextField *tf = [[KWTextField alloc] init];        UIStackView *stackV = [[UIStackView alloc] init];        stackV.axis = UILayoutConstraintAxisVertical;        stackV.alignment = UIStackViewAlignmentFill;        stackV.distribution = UIStackViewDistributionFill;        stackV.spacing = 5;        if (![titleArr[i] isEqualToString:@""]) {            UILabel *lb = [[UILabel alloc] init];            lb.font = [UIFont fontWithName:Rob_Regular size:12];            lb.textColor = UIColor.blackColor;            [stackV addArrangedSubview:lb];//            lb.text = titleArr[i];            [lb mas_makeConstraints:^(MASConstraintMaker *make) {                make.height.equalTo(@5);            }];        }        [stackV addArrangedSubview:tf];        tf.placeholder = placeArr[i];        [tf mas_makeConstraints:^(MASConstraintMaker *make) {            make.height.equalTo(@45);        }];        tf.delegate = self;        [tf addTarget:self action:@selector(textfieldDidChange:) forControlEvents:UIControlEventEditingChanged];        [tf addTarget:self action:@selector(textfieldDidChange:) forControlEvents:UIControlEventValueChanged];                switch (i) {            case 0: {                self.emailTf = tf;                [self.totalStackV addArrangedSubview:stackV];                UIView *v = [UIView new];                v.backgroundColor = UIColor.clearColor;                [v addSubview:self.changePassBt];                [self.totalStackV addArrangedSubview:v];                [v mas_makeConstraints:^(MASConstraintMaker *make) {                    make.height.equalTo(@30);                }];                [self.changePassBt mas_makeConstraints:^(MASConstraintMaker *make) {                    make.top.left.bottom.equalTo(v);                }];                break;            }            case 1: {                self.oldPassTf = tf;                self.oldPassTf.secureTextEntry = true;                UIView *lv = [self getPassRightBt:800000];                self.oldPassTf.rightView = lv;                [lv mas_makeConstraints:^(MASConstraintMaker *make) {                    make.width.equalTo(@50);                    make.height.equalTo(@45);                }];                self.oldPassTf.rightViewMode = UITextFieldViewModeAlways;                [self.totalStackV addArrangedSubview:self.passStackV];                [self.passStackV addArrangedSubview:stackV];                break;            }            case 2: {                self.nPassTf = tf;                self.nPassTf.secureTextEntry = true;                                UIView *lv = [self getPassRightBt:800001];                lv.frame = CGRectMake(0, 0, 50, 45);                self.nPassTf.rightView = lv;                [lv mas_makeConstraints:^(MASConstraintMaker *make) {                    make.width.equalTo(@50);                    make.height.equalTo(@45);                }];                self.nPassTf.rightViewMode = UITextFieldViewModeAlways;                [self.passStackV addArrangedSubview:stackV];                break;            }            default:                break;        }    }    self.passStackV.hidden = true;    [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]);    }];        [self.view addSubview:self.bottomBt];    [self.bottomBt mas_makeConstraints:^(MASConstraintMaker *make) {        make.left.equalTo(self.view).offset(20);        make.right.equalTo(self.view).offset(-20);        make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom).offset(-20);        make.height.equalTo(@45);    }];        [self.scrollV mas_makeConstraints:^(MASConstraintMaker *make) {        make.left.right.equalTo(self.view);        make.top.equalTo(self.customNavBar.mas_bottom);        make.bottom.equalTo(self.bottomBt.mas_top).offset(-10);    }];        self.birthTf.delegate = self;    }- (UIScrollView *)scrollV {    if (!_scrollV) {        UIScrollView *v = [[UIScrollView alloc] init];        v.showsVerticalScrollIndicator = false;        v.showsHorizontalScrollIndicator = false;        v.alwaysBounceVertical = true;        v.backgroundColor = [UIColor colorWithHexString:@"#f8f8f8"];        _scrollV = v;    }    return _scrollV;}- (UIButton *)changePassBt {    if (!_changePassBt) {        UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];        [bt setImage:[UIImage imageNamed:@"login_selectRido"] forState:UIControlStateNormal];        [bt setImage:[UIImage imageNamed:@"login_selectRido_select"] forState:UIControlStateSelected];        [bt setTitle:@" Change Password" forState:UIControlStateNormal];        bt.titleLabel.font = [UIFont fontWithName:Rob_Regular size:12];        [bt setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];        [bt addTarget:self action:@selector(changePassTypeChanege) forControlEvents:UIControlEventTouchUpInside];        _changePassBt = bt;    }    return  _changePassBt;}- (void)changePassTypeChanege {    switch (self.showType) {        case 0:            self.showType = 1;            break;        case 1:            self.showType = 0;            break;                    default:            break;    }    [self configViewsByShowType];    }- (void)configViewsByShowType {    switch (self.showType) {        case 0:            self.changePassBt.selected = false;            self.passStackV.hidden = true;            [self.bottomBt setTitle:@"SAVE CHANGES" forState:UIControlStateNormal];            break;        case 1:            self.changePassBt.selected = true;            self.passStackV.hidden = false;            [self.bottomBt setTitle:@"SAVE CHANGES" forState:UIControlStateNormal];            break;        default:            break;    }    [self configBtState];    }- (void)configBtState {    switch (self.showType) {        case 0:            self.bottomBt.enabled = !self.emailTf.text.isEmpty && !self.nameTf.text.isEmpty && !self.lastNTf.text.isEmpty && !self.birthTf.text.isEmpty;            break;        case 1: {            BOOL isflag = !self.emailTf.text.isEmpty && !self.oldPassTf.text.isEmpty && !self.nPassTf.text.isEmpty && !self.nameTf.text.isEmpty && !self.lastNTf.text.isEmpty && !self.birthTf.text.isEmpty;            self.bottomBt.enabled = isflag;            break;        }        default:            break;    }    self.bottomBt.backgroundColor = self.bottomBt.isEnabled ? [UIColor blackColor] : [UIColor colorWithHexString:@"#ADADAD"];}- (UIView *)getPassRightBt:(NSInteger)tag {    UIView *v = [UIView new];    v.backgroundColor = UIColor.whiteColor;    UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];    [bt setImage:[UIImage imageNamed:@"login_password_secure"] forState:UIControlStateNormal];    [bt setImage:[UIImage imageNamed:@"login_password_secure_display"] forState:UIControlStateSelected];    [bt addTarget:self action:@selector(tfBtAction:) forControlEvents:UIControlEventTouchUpInside];    bt.tag = tag;    [v addSubview:bt];    [bt mas_makeConstraints:^(MASConstraintMaker *make) {        make.width.height.equalTo(@30);        make.right.equalTo(v).offset(-17);        make.centerY.equalTo(v);    }];    return v;}- (void)tfBtAction:(UIButton *)bt {    NSInteger tag = bt.tag - 800000;    bt.selected = !bt.isSelected;    if (tag == 0) {        self.oldPassTf.secureTextEntry = !bt.isSelected;    } else {        self.nPassTf.secureTextEntry = !bt.isSelected;    }}- (UIButton *)bottomBt {    if (!_bottomBt) {        UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];        [bt setTitle:@"NEXT" forState:UIControlStateNormal];        bt.titleLabel.font = [UIFont fontWithName:Rob_Regular size:16];        [bt setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];        [bt setBackgroundColor:[UIColor colorWithHexString:@"#ADADAD"]];        bt.layer.cornerRadius = 4;        bt.layer.masksToBounds = true;        bt.enabled = false;        [bt addTarget:self action:@selector(bottomBtAction) forControlEvents:UIControlEventTouchUpInside];        _bottomBt = bt;    }    return _bottomBt;}- (void)bottomBtAction {        if (self.emailTf.text == nil || self.emailTf.text.length == 0) {        [self.view makeToast:@"The email address con't be empty"];        return;    }    if (self.nameTf.text == nil || self.nameTf.text.length == 0) {        [self.view makeToast:@"The firstName con't be empty"];        return;    }    if (self.lastNTf.text == nil || self.lastNTf.text.length == 0) {        [self.view makeToast:@"The lastName con't be empty"];        return;    }    if (self.changePassBt.isSelected) {        if (self.oldPassTf.text == nil || self.oldPassTf.text.length == 0) {            [self.view makeToast:@"The old password con't be empty"];            return;        }        if (self.nPassTf.text == nil || self.nPassTf.text.length == 0) {            [self.view makeToast:@"The new password con't be empty"];            return;        }    }        NSMutableDictionary *param = [NSMutableDictionary dictionaryWithDictionary:@{        @"email": self.emailTf.text,        @"firstname": self.nameTf.text,        @"lastname": self.lastNTf.text,    }];    if (self.birthTf.text != nil && self.birthTf.text.length > 0) {        param[@"dob"] = self.birthTf.text;    }    BOOL __block isInfoSuc = false;    BOOL __block isPassSuc = false;    __weak typeof(self) weakSelf = self;    [MBProgressHUD showHUDAddedTo:self.view animated:true];    dispatch_group_t group = dispatch_group_create();    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);        dispatch_group_enter(group);    dispatch_group_async(group, queue, ^{        [ASNetTools.shared putWithPath:putUserInfo param: @{@"customer":param} success:^(id _Nonnull json) {            isInfoSuc = true;            dispatch_group_leave(group);        } faild:^(NSString * _Nonnull code, NSString * _Nonnull msg) {            [weakSelf.view makeToast:@"Bad Net"];            isInfoSuc = false;            dispatch_group_leave(group);        }];    });        if (!self.changePassBt.isSelected) {        isPassSuc = true;        dispatch_group_notify(group, dispatch_get_main_queue(), ^{            [MBProgressHUD hideHUDForView:weakSelf.view animated:true];            BOOL flag = isInfoSuc;            NSString *str = @"Successfully Change  Information";            if (weakSelf.changePassBt.isSelected) {                flag = isInfoSuc && isPassSuc;                str = @"Successfully Change  Information, Please Log In Again";            }            if (!flag) {                [ASUserInfoManager.shared getInfo];                return;            }                        [ASHomeAlertWindow alertMsg:str];            if (weakSelf.changePassBt.isSelected) {                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{                    [ASHomeAlertWindow clearWindow];                    [weakSelf popAndToLogin];                });            } else {                [ASUserInfoManager.shared getInfo];            }                    });        return;    }    NSDictionary *dic = @{        @"currentPassword": self.oldPassTf.text,        @"newPassword": self.nPassTf.text,    };    dispatch_group_enter(group);    dispatch_group_async(group, queue, ^{        [ASNetTools.shared putWithPath:putUserPassword param:dic success:^(id _Nonnull json) {            isPassSuc = true;            dispatch_group_leave(group);        } faild:^(NSString * _Nonnull code, NSString * _Nonnull msg) {            [weakSelf.view makeToast:@"Bad Net"];            isPassSuc = false;            dispatch_group_leave(group);        }];    });    dispatch_group_notify(group, dispatch_get_main_queue(), ^{        [MBProgressHUD hideHUDForView:weakSelf.view animated:true];        BOOL flag = isInfoSuc;        NSString *str = @"Successfully Change  Information";        if (weakSelf.changePassBt.isSelected) {            flag = isInfoSuc && isPassSuc;            str = @"Successfully Change  Information, Please Log In Again";        }        if (!flag) {            [ASUserInfoManager.shared getInfo];            return;        }                [ASHomeAlertWindow alertMsg:str];        if (weakSelf.changePassBt.isSelected) {            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{                [ASHomeAlertWindow clearWindow];                [weakSelf popAndToLogin];            });        } else {            [ASUserInfoManager.shared getInfo];        }            });    }- (void)textfieldDidChange:(UITextField *)tf {    [self configBtState];}- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {    if ([self.birthTf isEqual:textField]) {        BRDatePickerView *datePickerView = [[BRDatePickerView alloc]init];        datePickerView.pickerMode = BRDatePickerModeDate;        datePickerView.title = @"Please Select The Date Of Birth";        datePickerView.selectDate = self.currentDate;        datePickerView.minDate = [NSDate br_setYear:1900 month:1 day:1];        datePickerView.maxDate = [NSDate date];        datePickerView.isAutoSelect = YES;        @weakify(self);        datePickerView.resultBlock = ^(NSDate *selectDate, NSString *selectValue) {            weak_self.currentDate = selectDate;            NSDateFormatter *formartter= [[NSDateFormatter alloc]init];            [formartter setDateFormat:@"MM/dd/yyyy"];            NSString *currentDateStr = [formartter stringFromDate:selectDate];            weak_self.birthTf.text = currentDateStr;            [weak_self configBtState];            NSLog(@"selectValue=%@", selectValue);            NSLog(@"selectDate=%@", selectDate);            NSLog(@"---------------------------------");                    };        [datePickerView show];        return false;    }    return true;}@end
 |