Files
peko-ios/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoEditViewController.m

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