425 lines
16 KiB
Objective-C
425 lines
16 KiB
Objective-C
//
|
|
// XPMineUserInfoEditViewController.m
|
|
// xplan-ios
|
|
//
|
|
// Created by 冯硕 on 2021/9/23.
|
|
//
|
|
|
|
#import "XPMineUserInfoEditViewController.h"
|
|
///Third
|
|
#import <Masonry/Masonry.h>
|
|
#import <ReactiveObjC/ReactiveObjC.h>
|
|
///Tool
|
|
|
|
#import "TTPopup.h"
|
|
#import "YYUtility.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"
|
|
#import "XPMineUserInfoTagVC.h"
|
|
|
|
UIKIT_EXTERN NSString * kUpdateSoundInfo;
|
|
|
|
@interface XPMineUserInfoEditViewController ()<UITableViewDelegate, UITableViewDataSource, XPMineUserInfoEditProtocol, XPMineUserInfoDesViewControllerDelegate, XPMineUserInfoNickViewControllerDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, XPMineUserInfoDateViewDelegate,XPMineUserInfoTagVCDelegate,XPMineUserInfoEditPickViewDelegate>
|
|
///列表
|
|
@property (nonatomic,strong) UITableView *tableView;
|
|
///数据源
|
|
@property (nonatomic,strong) NSArray *datasouce;
|
|
|
|
///用户信息
|
|
@property (nonatomic,strong) UserInfoModel *userInfo;
|
|
///地区列表
|
|
@property (nonatomic,strong) NSMutableArray *areaList;
|
|
///标签
|
|
@property (nonatomic,strong) NSMutableArray *tagList;
|
|
///
|
|
@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];
|
|
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(updateSoundInfo:) name:kUpdateSoundInfo object:nil];
|
|
}
|
|
-(void)getAreaList{
|
|
|
|
[self.presenter getAreaList];
|
|
}
|
|
-(void)updateSoundInfo:(NSNotification *)not{
|
|
if(not.object != nil){
|
|
self.soundModel = not.object;
|
|
}else{
|
|
self.soundModel = nil;
|
|
}
|
|
[self.tableView reloadData];
|
|
}
|
|
- (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];
|
|
}];
|
|
}
|
|
#pragma mark - XPMineUserInfoTagVCDelegate
|
|
- (void)xPMineUserInfoTagVC:(XPMineUserInfoTagVC *)vc didClickComplete:(NSArray *)meLabels{
|
|
self.tagModel.meLabels = meLabels;
|
|
self.tagList = [NSMutableArray array];
|
|
CGFloat maxWidth = 0;
|
|
self.maxWidth = 0;
|
|
for (int i = 0; i < meLabels.count; i++) {
|
|
XPMineUserInfoTagItemModel *model = [XPMineUserInfoTagItemModel new];
|
|
NSString *text = meLabels[i];
|
|
model.label = text;
|
|
CGRect stringRect = [text boundingRectWithSize:CGSizeMake(MAXFLOAT, kGetScaleWidth(18)) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:kFontRegular(10)} context:nil];
|
|
CGFloat width = stringRect.size.width + kGetScaleWidth(14);
|
|
model.width = width;
|
|
maxWidth = maxWidth + width;
|
|
if(maxWidth < kGetScaleWidth(220)){
|
|
self.maxWidth = maxWidth;
|
|
[self.tagList addObject:model];
|
|
}
|
|
|
|
}
|
|
[self.tableView reloadData];
|
|
if(self.delegate && [self.delegate respondsToSelector:@selector(xPMineUserInfoEditViewControllerC:didClickComplete:)]){
|
|
[self.delegate xPMineUserInfoEditViewControllerC:self didClickComplete:@""];
|
|
}
|
|
}
|
|
#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 kGetScaleWidth(80);
|
|
} else {
|
|
return kGetScaleWidth(60);
|
|
}
|
|
}
|
|
|
|
- (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];
|
|
if(model.type == XPMineUserInfoEditType_Tag){
|
|
cell.itemList = self.tagList;
|
|
cell.maxWidth = self.maxWidth + self.tagList.count * kGetScaleWidth(5);
|
|
model.subTitle = self.tagList.count > 0 ? @"":YMLocalizedString(@"XPMineUserInfoEditPresenter9");
|
|
}else if(model.type == XPMineUserInfoEditType_Area){
|
|
model.subTitle = self.area;
|
|
}
|
|
|
|
cell.itmeModel = model;
|
|
cell.soundModel = self.soundModel;
|
|
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;
|
|
case XPMineUserInfoEditType_Sound:
|
|
{
|
|
XPMineUserInfoRecordedSoundVC *vc = [XPMineUserInfoRecordedSoundVC new];
|
|
vc.soundModel = self.soundModel;
|
|
[self.navigationController pushViewController:vc animated:YES];
|
|
break;
|
|
}
|
|
case XPMineUserInfoEditType_Tag:
|
|
{
|
|
XPMineUserInfoTagVC *tagVC =[XPMineUserInfoTagVC new];
|
|
tagVC.tagModel = self.tagModel;
|
|
tagVC.delegate = self;
|
|
[self.navigationController pushViewController:tagVC animated:YES];
|
|
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
|
|
-(void)setSoundModel:(XPSoundCardModel *)soundModel{
|
|
_soundModel = soundModel;
|
|
[self.tableView reloadData];
|
|
}
|
|
-(void)setTagModel:(XPMineUserInfoTagModel *)tagModel{
|
|
_tagModel = tagModel;
|
|
NSArray *meLabels = _tagModel.meLabels;
|
|
self.tagList = [NSMutableArray array];
|
|
CGFloat maxWidth = 0 ;
|
|
self.maxWidth = 0;
|
|
for (int i = 0; i < meLabels.count; i++) {
|
|
XPMineUserInfoTagItemModel *model = [XPMineUserInfoTagItemModel new];
|
|
NSString *text = meLabels[i];
|
|
model.label = text;
|
|
CGRect stringRect = [text boundingRectWithSize:CGSizeMake(MAXFLOAT, kGetScaleWidth(18)) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:kFontRegular(10)} context:nil];
|
|
CGFloat width = stringRect.size.width + kGetScaleWidth(14);
|
|
model.width = width;
|
|
maxWidth = maxWidth + width;
|
|
if(maxWidth < kGetScaleWidth(220)){
|
|
self.maxWidth = maxWidth;
|
|
[self.tagList addObject:model];
|
|
}
|
|
|
|
}
|
|
[self.tableView reloadData];
|
|
}
|
|
- (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
|