// // YMMineUserInfoEditViewController.m // YUMI // // Created by YUMI on 2021/9/23. // #import "XPMineUserInfoEditViewController.h" ///Third #import #import ///Tool #import "DJDKMIMOMColor.h" #import "TTPopup.h" #import "YYUtility.h" #import "YUMIMacroUitls.h" #import "NSArray+Safe.h" ///Model #import "XPMineUserInfoEditModel.h" #import "UserInfoModel.h" ///View #import "XPMineUserInfoEditTableViewCell.h" #import "XPMineUserInfoDateView.h" ///P #import "XPMineUserInfoEditProtocol.h" #import "XPMineUserInfoEditPresenter.h" ///VC #import "XPMineUserInfoNickViewController.h" #import "XPMineUserInfoDesViewController.h" #import "XPMineUserInfoAlbumViewController.h" @interface XPMineUserInfoEditViewController () ///列表 @property (nonatomic,strong) UITableView *tableView; ///数据源 @property (nonatomic,strong) NSArray *datasouce; /// 日期选择器 @property (nonatomic,strong) XPMineUserInfoDateView *dateView; ///用户信息 @property (nonatomic,strong) UserInfoModel *userInfo; @end @implementation XPMineUserInfoEditViewController - (XPMineUserInfoEditPresenter *)createPresenter { return [[XPMineUserInfoEditPresenter alloc] init]; } - (void)viewDidLoad { [super viewDidLoad]; [self initSubViews]; [self initSubViewConstraints]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.presenter getUserInfo]; } #pragma mark - Private Method - (void)initSubViews { 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(@"SessionViewController19") content:YMLocalizedString(@"XPMineUserInfoEditViewController3")]; } restriction:^{ @strongify(self); [self showNotPhoto:YMLocalizedString(@"SessionViewController19") 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(@"SessionViewController21") content:YMLocalizedString(@"XPMineUserInfoEditViewController8")]; } restriction:^{ @strongify(self); [self showNotPhoto:YMLocalizedString(@"SessionViewController21") 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]; } } cancelHandler:^{ }]; } - (void)showDatePickerView { self.dateView.time = self.userInfo.birth/1000; [TTPopup popupView:self.dateView style:TTPopupStyleActionSheet]; } #pragma mark - UITableViewDelegate And UITableViewDataSource - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.datasouce.count; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { XPMineUserInfoEditModel * model = [self.datasouce safeObjectAtIndex1:indexPath.row]; if (model.type == XPMineUserInfoEditType_Avatar) { return 60; } else { return 50; } } - (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])]; } XPMineUserInfoEditModel * model = [self.datasouce safeObjectAtIndex1:indexPath.row]; cell.itmeModel = model; return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; XPMineUserInfoEditModel * model = [self.datasouce safeObjectAtIndex1: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; 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.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{ [TTPopup dismiss]; if (dateStr.length > 0) { [self.presenter complectionInfoWithAvatar:nil nick:nil birth:dateStr userDesc:nil]; } } - (void)xPMineUserInfoDateView:(XPMineUserInfoDateView *)view didClickCancleButton:(UIButton *)sender { [TTPopup dismiss]; } #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)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.presenter complectionInfoWithAvatar:url nick:nil birth:nil userDesc:nil]; } #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; } - (XPMineUserInfoDateView *)dateView { if (!_dateView) { _dateView = [[XPMineUserInfoDateView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 216+kSafeAreaBottomHeight+54)]; _dateView.delegate = self; } return _dateView; } @end