// // XPMineUserInfoEditViewController.m // xplan-ios // // Created by 冯硕 on 2021/9/23. // #import "XPMineUserInfoEditViewController.h" ///Third #import #import ///Tool #import "TTPopup.h" #import "YYUtility.h" #import "Api+Mine.h" ///Model #import "XPMineUserInfoEditModel.h" #import "UserInfoModel.h" ///View #import "XPMineUserInfoEditTableViewCell.h" #import "XPMineUserInfoDateView.h" #import "XPMineUserInfoEditPickView.h" ///P #import "XPMineUserInfoEditProtocol.h" #import "XPMineUserInfoEditPresenter.h" ///VC #import "XPMineUserInfoNickViewController.h" #import "XPMineUserInfoDesViewController.h" #import "XPMineUserInfoAlbumViewController.h" #import "XPMineUserInfoRecordedSoundVC.h" UIKIT_EXTERN NSString * kUpdateSoundInfo; @interface XPMineUserInfoEditViewController () ///列表 @property (nonatomic,strong) UITableView *tableView; ///数据源 @property (nonatomic,strong) NSArray *datasouce; ///用户信息 @property (nonatomic,strong) UserInfoModel *userInfo; ///地区列表 @property (nonatomic,strong) NSMutableArray *areaList; @property (nonatomic,assign) CGFloat maxWidth; @end @implementation XPMineUserInfoEditViewController -(void)dealloc{ [[NSNotificationCenter defaultCenter]removeObserver:self]; } - (XPMineUserInfoEditPresenter *)createPresenter { return [[XPMineUserInfoEditPresenter alloc] init]; } - (void)viewDidLoad { [super viewDidLoad]; self.areaList = [NSMutableArray array]; [self initSubViews]; [self initSubViewConstraints]; [self getAreaList]; } -(void)getAreaList { [self.presenter getAreaList]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.presenter getUserInfo]; } #pragma mark - Private Method - (void)initSubViews { self.view.backgroundColor = [UIColor whiteColor]; self.title = YMLocalizedString(@"XPMineUserInfoEditViewController0"); [self.view addSubview:self.tableView]; } - (void)initSubViewConstraints { [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.mas_equalTo(self.view); }]; } - (void)showPhotoView { @weakify(self); TTActionSheetConfig *cameraConfig = [TTActionSheetConfig normalTitle:YMLocalizedString(@"XPMineUserInfoEditViewController1") clickAction:^{ [YYUtility checkCameraAvailable:^{ @strongify(self); UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; imagePicker.delegate = self; imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; imagePicker.allowsEditing = YES; [self presentViewController:imagePicker animated:YES completion:NULL]; } denied:^{ @strongify(self); [self showNotPhoto:YMLocalizedString(@"XPMineUserInfoEditViewController2") content:YMLocalizedString(@"XPMineUserInfoEditViewController3")]; } restriction:^{ @strongify(self); [self showNotPhoto:YMLocalizedString(@"XPMineUserInfoEditViewController4") content:YMLocalizedString(@"XPMineUserInfoEditViewController5")]; }]; }]; TTActionSheetConfig *photoLibrayConfig = [TTActionSheetConfig normalTitle:YMLocalizedString(@"XPMineUserInfoEditViewController6") clickAction:^{ [YYUtility checkAssetsLibrayAvailable:^{ @strongify(self); UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; imagePicker.modalPresentationCapturesStatusBarAppearance = YES; imagePicker.delegate = self; imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; imagePicker.allowsEditing = YES; [self presentViewController:imagePicker animated:YES completion:NULL]; } denied:^{ @strongify(self); [self showNotPhoto:YMLocalizedString(@"XPMineUserInfoEditViewController7") content:YMLocalizedString(@"XPMineUserInfoEditViewController8")]; } restriction:^{ @strongify(self); [self showNotPhoto:YMLocalizedString(@"XPMineUserInfoEditViewController9") content:YMLocalizedString(@"XPMineUserInfoEditViewController10")]; }]; }]; [TTPopup actionSheetWithItems:@[cameraConfig, photoLibrayConfig]]; } - (void)showNotPhoto:(NSString *)title content:(NSString *)content { TTAlertConfig *config = [[TTAlertConfig alloc] init]; config.title = title; config.message = content; [TTPopup alertWithConfig:config confirmHandler:^{ NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) { }]; } } cancelHandler:^{ }]; } - (void)showDatePickerView { XPMineUserInfoDateView *dateView = [[XPMineUserInfoDateView alloc] initWithFrame:CGRectMake(0, KScreenHeight, KScreenWidth,KScreenHeight)]; dateView.delegate = self; dateView.time = self.userInfo.birth/1000; [kWindow addSubview:dateView]; [UIView animateWithDuration:0.5 animations:^{ dateView.frame = CGRectMake(0, 0, KScreenWidth, KScreenHeight); }completion:^(BOOL finished) { dateView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5]; }]; } - (void)updateCPSetting:(BOOL)isOn type:(NSInteger)type { [self showLoading]; @kWeakify(self); [Api updateCPSetting:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { @kStrongify(self); [self hideHUD]; if (code == 200) { if (type == 1) { self.relationUser.showCpAvatar = isOn; } else { self.relationUser.showCpAnim = isOn; } [self showSuccessToast:msg]; } else { [self showErrorToast:msg]; } } type:@(type) isShow:@(isOn)]; } #pragma mark - UITableViewDelegate And UITableViewDataSource - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 2; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if (section == 1) { return 2; } return self.datasouce.count; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.section == 1) { return kGetScaleWidth(60); } XPMineUserInfoEditModel * model = [self.datasouce xpSafeObjectAtIndex:indexPath.row]; if (model.type == XPMineUserInfoEditType_Avatar) { return kGetScaleWidth(80); } else { return kGetScaleWidth(60); } } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { if (section == 1) { return 60; } return 0; } - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { if (section == 1) { // 创建 header view UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 60)]; headerView.backgroundColor = [UIColor clearColor]; // 创建 label 或者其他子视图 UILabel *label = [UILabel labelInitWithText:@"CP" font:kFontMedium(15) textColor:UIColorFromRGB(0x313131)]; // 添加到 header view [headerView addSubview:label]; // 设置 Auto Layout 约束,给 label 添加左间距 label.translatesAutoresizingMaskIntoConstraints = NO; [NSLayoutConstraint activateConstraints:@[ [label.leadingAnchor constraintEqualToAnchor:headerView.leadingAnchor constant:16], // 左间距为16 [label.centerYAnchor constraintEqualToAnchor:headerView.centerYAnchor], // 垂直居中 ]]; return headerView; } return nil; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { XPMineUserInfoEditTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineUserInfoEditTableViewCell class])]; if (cell == nil) { cell = [[XPMineUserInfoEditTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPMineUserInfoEditTableViewCell class])]; } if (indexPath.section == 1) { XPMineUserInfoEditModel *model = [[XPMineUserInfoEditModel alloc] init]; if (indexPath.row == 0) { model.isCPAnimation = self.relationUser.showCpAnim; model.title = YMLocalizedString(@"UserDetail_Setting_0"); model.type = XPMineUserInfoEditType_CP_Animation; } else { model.isCPAvatar = self.relationUser.showCpAvatar; model.title =YMLocalizedString(@"UserDetail_Setting_1"); model.type = XPMineUserInfoEditType_CP_Avatar; } cell.itmeModel = model; @kWeakify(self); [cell setChangeCPSwitch:^(BOOL isOn, NSInteger type) { @kStrongify(self); [self updateCPSetting:isOn type:type]; }]; return cell; } XPMineUserInfoEditModel * model = [self.datasouce xpSafeObjectAtIndex:indexPath.row]; if(model.type == XPMineUserInfoEditType_Tag){ }else if(model.type == XPMineUserInfoEditType_Area){ model.subTitle = self.area; } cell.itmeModel = model; return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; if (indexPath.section == 1) { return; } XPMineUserInfoEditModel * model = [self.datasouce xpSafeObjectAtIndex:indexPath.row]; switch (model.type) { case XPMineUserInfoEditType_Nick: { XPMineUserInfoNickViewController * nickVC = [[XPMineUserInfoNickViewController alloc] init]; nickVC.delegate = self; nickVC.nick = self.userInfo.nick; [self.navigationController pushViewController:nickVC animated:YES]; } break; case XPMineUserInfoEditType_Avatar: { if (self.userInfo.isReview) { [self showErrorToast:YMLocalizedString(@"XPMineUserInfoEditViewController11")]; } else { [self showPhotoView]; } } break; case XPMineUserInfoEditType_Birth: [self showDatePickerView]; break; case XPMineUserInfoEditType_UseDes: { XPMineUserInfoDesViewController * desVC = [[XPMineUserInfoDesViewController alloc] init]; desVC.delegate = self; desVC.userDesc = self.userInfo.userDesc; [self.navigationController pushViewController:desVC animated:YES]; } break; case XPMineUserInfoEditType_Photo: { XPMineUserInfoAlbumViewController * albumVC = [[XPMineUserInfoAlbumViewController alloc] init]; [self.navigationController pushViewController:albumVC animated:YES]; } break; case XPMineUserInfoEditType_Sound: break; case XPMineUserInfoEditType_Tag: break; case XPMineUserInfoEditType_Area: { XPMineUserInfoEditPickView *pckView = [[XPMineUserInfoEditPickView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)]; pckView.area = self.area; pckView.dataArray = self.areaList; pckView.delegate = self; [kWindow addSubview:pckView]; break; } default: break; } } #pragma mark - UIImagePickerControllerDelegate - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *selectedPhoto = [info objectForKey:UIImagePickerControllerEditedImage]; if (selectedPhoto) { if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) { UIImageWriteToSavedPhotosAlbum(selectedPhoto, nil, nil, nil); } [self showLoading]; [self.presenter uploadAvatar:selectedPhoto]; } [picker dismissViewControllerAnimated:YES completion:^{}]; } - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{ [picker dismissViewControllerAnimated:YES completion:^{ }]; } #pragma mark - XPMineUserInfoDateViewDelegate - (void)xPMineUserInfoDateView:(XPMineUserInfoDateView *)view didClickSureButton:(NSString *)dateStr{ if (dateStr.length > 0) { [self.presenter complectionInfoWithAvatar:nil nick:nil birth:dateStr userDesc:nil]; } } #pragma mark - XPMineUserInfoNickViewControllerDelegate - (void)xPMineUserInfoNickViewController:(XPMineUserInfoNickViewController *)viewController updateNick:(NSString *)nick { if (nick.length > 0) { [self.presenter complectionInfoWithAvatar:nil nick:nick birth:nil userDesc:nil]; } } #pragma mark - XPMineUserInfoDesViewControllerDelegate - (void)xPMineUserInfoDesViewController:(XPMineUserInfoDesViewController *)viewController updateUserDes:(NSString *)userDes { if (userDes.length > 0) { [self.presenter complectionInfoWithAvatar:nil nick:nil birth:nil userDesc:userDes]; } } #pragma mark - XPMineUserInfoEditProtocol - (void)getUserInfoEditDataSourceSuccess:(NSArray *)array { self.datasouce = array; [self.tableView reloadData]; } -(void)getAreaListSuccess:(NSArray *)list{ self.areaList = [list mutableCopy]; } - (void)saveAreaSuccess{ if(self.delegate && [self.delegate respondsToSelector:@selector(xPMineUserInfoEditViewControllerC:didClickCompleteArea:)]){ [self.delegate xPMineUserInfoEditViewControllerC:self didClickCompleteArea:self.area]; } [self.tableView reloadData]; } - (void)completeUserInfoSuccess:(UserInfoModel *)userInfo { if (userInfo.isReview) { [self showSuccessToast:YMLocalizedString(@"XPMineUserInfoEditViewController12")]; dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)); dispatch_after(delayTime, dispatch_get_main_queue(), ^{ [self.presenter getUserInfo]; }); } else { [self showSuccessToast:YMLocalizedString(@"XPMineUserInfoEditViewController13")]; [self.presenter getUserInfo]; } } - (void)onGetUserInfoSuccess:(UserInfoModel *)userInfo { self.userInfo = userInfo; [self.presenter getUserInfoEditDataSourceWithUserInfo:self.userInfo]; } - (void)uploadImageSuccess:(NSString *)url { [self hideHUD]; [self.presenter complectionInfoWithAvatar:url nick:nil birth:nil userDesc:nil]; } #pragma mark - XPMineUserInfoEditPickView - (void)didClickSureActionWithArea:(NSString *)area{ self.area = area; [self.presenter saveAreaConfigWithArea:area]; } #pragma mark - Getters And Setters - (UITableView *)tableView { if (!_tableView) { _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; _tableView.delegate = self; _tableView.dataSource = self; _tableView.tableFooterView = [UIView new]; _tableView.tableHeaderView = [UIView new]; _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; _tableView.backgroundColor = [UIColor clearColor]; if (@available(iOS 11.0, *)) { _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; } [_tableView registerClass:[XPMineUserInfoEditTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPMineUserInfoEditTableViewCell class])]; } return _tableView; } @end