// // HJBasicInfoViewController.m // HappyJob // // Created by Bob on 2019/4/16. // Copyright © 2019 Bob. All rights reserved. // #import "HJBasicInfoViewController.h" #import "HJLabelTextFieldView.h" #import "HJSaveBasicInfoAPIManager.h" #import "UIViewController+FBImagePicker.h" #import "HJResumeDataBox.h" #import "UITextField+LimitLength.h" #import "HJExpectationViewController.h" @interface HJBasicInfoViewController () < FBScrollLayoutViewDelegate, FBAPIManagerDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIGestureRecognizerDelegate > @property (nonatomic, strong) FBScrollLayoutView *scrollLayoutView; @property (nonatomic, strong) HJLabelTextFieldView *headerView; @property (nonatomic, strong) HJLabelTextFieldView *nameView; @property (nonatomic, strong) HJLabelTextFieldView *sexView; @property (nonatomic, strong) HJLabelTextFieldView *phoneView; @property (nonatomic, strong) HJLabelTextFieldView *yearView; @property (nonatomic, strong) HJLabelTextFieldView *educationView; @property (nonatomic, strong) HJLabelTextFieldView *WeChatView; @property (nonatomic, strong) UIButton *saveButton; @property (nonatomic, strong) ValuePickerView *pickView; @property (nonatomic, copy) NSArray *yearDataSource; @property (nonatomic, strong) HJSaveBasicInfoAPIManager *saveResumeBaseInfoAPIManager; @property (nonatomic, strong) HJResumeDataBox *resumeDataBox; @end @implementation HJBasicInfoViewController #pragma mark - life cycle - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:NO animated:YES]; if (self.isBackPop) { self.navigationController.interactivePopGestureRecognizer.delegate = self; } } - (void)viewDidLoad { [super viewDidLoad]; self.title = @"个人资料"; [self hj_setupNavBar]; [self.view addSubview:self.scrollLayoutView]; self.view.backgroundColor = COLOR_F5F5F5; [self.scrollLayoutView.contentView addSubview:self.headerView]; [self.scrollLayoutView.contentView addSubview:self.nameView]; [self.scrollLayoutView.contentView addSubview:self.sexView]; [self.scrollLayoutView.contentView addSubview:self.phoneView]; [self.scrollLayoutView.contentView addSubview:self.yearView]; [self.scrollLayoutView.contentView addSubview:self.educationView]; [self.scrollLayoutView.contentView addSubview:self.WeChatView]; [self.scrollLayoutView.contentView addSubview:self.saveButton]; [self.scrollLayoutView makeConstraints]; } #pragma mark - 导航栏的代理 - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { [self.navigationController setNavigationBarHidden:NO animated:YES]; } #pragma mark - FBScrollLayoutViewDelegate - (void)scrollLayoutViewMakeConstraints:(FBScrollLayoutView *)scrollLayoutView { [scrollLayoutView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.equalTo(self.view); make.top.equalTo(self.view).offset(10); make.bottom.equalTo(self.view); }]; } - (void)subviewsMakeConstraintsInScrollLayoutView:(FBScrollLayoutView *)scrollLayoutView contentView:(UIView *)contentView { [self.headerView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.left.right.equalTo(contentView); make.height.mas_equalTo(88); }]; [self.headerView.contentImageV mas_remakeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(self.headerView); make.right.equalTo(self.headerView.rightImageV.mas_left).with.offset(-15); make.size.mas_offset(CGSizeMake(50, 50)); }]; [self.nameView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.headerView.mas_bottom); make.left.right.equalTo(contentView); make.height.mas_equalTo(58); }]; [self.sexView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.nameView.mas_bottom); make.left.right.equalTo(contentView); make.height.mas_equalTo(self.nameView); }]; [self.phoneView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.sexView.mas_bottom); make.left.right.equalTo(contentView); make.height.mas_equalTo(self.nameView); }]; [self.yearView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.phoneView.mas_bottom); make.left.right.equalTo(contentView); make.height.mas_equalTo(self.nameView); }]; [self.educationView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.yearView.mas_bottom); make.left.right.equalTo(contentView); make.height.mas_equalTo(self.nameView); }]; [self.WeChatView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.educationView.mas_bottom); make.left.right.equalTo(contentView); make.height.mas_equalTo(self.nameView); }]; [self.saveButton mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.WeChatView.mas_bottom).offset(25); make.left.equalTo(contentView).offset(15); make.right.equalTo(contentView).offset(-15); make.height.mas_equalTo(44); }]; [contentView mas_makeConstraints:^(MASConstraintMaker *make) { // 这里的约束一定要等于previousNextView,不然键盘的自动浮动效果有Bug。 make.bottom.equalTo(self.saveButton); }]; } #pragma mark - UIImagePickerControllerDelegate - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { NSString *type = [info objectForKey:UIImagePickerControllerMediaType]; //当选择的类型是图片 if ([type isEqualToString:@"public.image"]) { //先把图片转成NSData UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; self.headerView.contentImageV.image = image; //关闭相册界面 [self dismissViewControllerAnimated:YES completion:nil]; } } - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { [self dismissViewControllerAnimated:YES completion:nil]; } #pragma mark - FBAPIManagerDelegate - (void)managerCallAPIDidSuccess:(FBBaseAPIManager *)manager { if (manager == self.saveResumeBaseInfoAPIManager) { id fetchData = [manager fetchDataWithBox:self.resumeDataBox]; if ([fetchData isKindOfClass:[NSString class]]) { [self.view fb_showSuccessWithStatus:fetchData completion:^{ if (self.isBackPop) {//返回到上个页面 [self.navigationController popViewControllerAnimated:YES]; } else {//不返回 HJExpectationViewController *vc = [[HJExpectationViewController alloc] init]; vc.isPopToRoot = YES; [self.navigationController pushViewController:vc animated:YES]; } }]; } } } - (void)managerCallAPIDidFailed:(FBBaseAPIManager *)manager { if (manager == self.saveResumeBaseInfoAPIManager) { id fetchData = [manager fetchDataWithBox:self.resumeDataBox]; if ([fetchData isKindOfClass:[NSString class]]) { [self.view fb_showFailureWithStatus:fetchData]; } } } #pragma mark - event response - (void)saveButtonClicked:(UIButton *)sender { if (self.nameView.contentTextField.text.length == 0) { [self.view fb_showFailureWithStatus:@"请先填写您的姓名"]; [self.nameView.contentTextField becomeFirstResponder]; } else if (self.nameView.contentTextField.text.length > 30) { [self.view fb_showFailureWithStatus:@"姓名不能超过30个字符"]; [self.nameView.contentTextField becomeFirstResponder]; } else if (self.sexView.contentTextField.text.length == 0) { [self.view fb_showFailureWithStatus:@"请先填写您的性别"]; [self.sexView.contentTextField becomeFirstResponder]; } else if (self.phoneView.contentTextField.text.length != 11) { [self.view fb_showFailureWithStatus:@"请您填写正确的手机号"]; [self.phoneView.contentTextField becomeFirstResponder]; } else if (self.yearView.contentTextField.text.length == 0) { [self.view fb_showFailureWithStatus:@"请先填写您的出生年份"]; [self.yearView.contentTextField becomeFirstResponder]; } else if (self.educationView.contentTextField.text.length == 0) { [self.view fb_showFailureWithStatus:@"请先填写您的学历"]; [self.educationView.contentTextField becomeFirstResponder]; } else { [self.view fb_showLoading]; UIImage *photo = self.headerView.contentImageV.image; if (photo && !CGSizeEqualToSize(photo.size, CGSizeZero)) { self.saveResumeBaseInfoAPIManager.photo = photo; } self.saveResumeBaseInfoAPIManager.realName = self.nameView.contentTextField.text; self.saveResumeBaseInfoAPIManager.phone = self.phoneView.contentTextField.text; self.saveResumeBaseInfoAPIManager.gender = [self.resumeDataBox.genderDataSource indexOfObject:self.sexView.contentTextField.text]; self.saveResumeBaseInfoAPIManager.birthYear = self.yearView.contentTextField.text; self.saveResumeBaseInfoAPIManager.education = [self.resumeDataBox.educationDataSource indexOfObject:self.educationView.contentTextField.text] + 1; self.saveResumeBaseInfoAPIManager.wechatNumber = self.WeChatView.contentTextField.text; [self.saveResumeBaseInfoAPIManager start]; } } - (void)photoButtonClicked{ [self fb_openImagePickerWithPhotoHandler:^(UIImagePickerController * _Nonnull imagePicker) { imagePicker.delegate = self; } cameraHandler:^(UIImagePickerController * _Nonnull imagePicker) { imagePicker.delegate = self; } cancelHandler:^{ }]; } /* 性别选择 */ - (void)sexSelextClicked { __weak typeof(self) weakSelf = self; _pickView = [[ValuePickerView alloc]init]; _pickView.dataSource = self.resumeDataBox.genderDataSource; _pickView.pickerHeight = 256; [_pickView reloadPickers]; [_pickView show]; _pickView.valueDidSelectWithIndexBlock = ^(NSString *value,NSInteger index){ weakSelf.sexView.contentTextField.text = weakSelf.resumeDataBox.genderDataSource[index]; }; } /* 出生年份*/ - (void)yearSelextClicked { __weak typeof(self) weakSelf = self; _pickView = [[ValuePickerView alloc]init]; _pickView.dataSource = self.yearDataSource; _pickView.pickerHeight = 256; [_pickView reloadPickers]; [_pickView show]; _pickView.valueDidSelectWithIndexBlock = ^(NSString *value,NSInteger index){ weakSelf.yearView.contentTextField.text = weakSelf.yearDataSource[index]; }; } /* 学历选择 */ - (void)educationSelextClicked { __weak typeof(self) weakSelf = self; _pickView = [[ValuePickerView alloc]init]; _pickView.dataSource = self.resumeDataBox.educationDataSource; _pickView.pickerHeight = 256; [_pickView reloadPickers]; [_pickView show]; _pickView.valueDidSelectWithIndexBlock = ^(NSString *value,NSInteger index){ weakSelf.educationView.contentTextField.text = weakSelf.resumeDataBox.educationDataSource[index]; }; } #pragma mark - getters and setters - (HJResumeDataBox *)resumeDataBox { if (_resumeDataBox == nil) { _resumeDataBox = [[HJResumeDataBox alloc] init]; } return _resumeDataBox; } - (HJSaveBasicInfoAPIManager *)saveResumeBaseInfoAPIManager { if (_saveResumeBaseInfoAPIManager == nil) { _saveResumeBaseInfoAPIManager = [[HJSaveBasicInfoAPIManager alloc] init]; _saveResumeBaseInfoAPIManager.APIManagerDelegate = self; } return _saveResumeBaseInfoAPIManager; } - (NSArray *)yearDataSource { if (_yearDataSource == nil) { // 生成年份 NSUInteger startYear = 1950; NSUInteger endYear = [[NSCalendar currentCalendar] components:NSCalendarUnitYear fromDate:[NSDate date]].year + 1; NSMutableArray *years = [NSMutableArray arrayWithCapacity:(endYear - startYear)]; for (NSUInteger y = startYear; y < endYear; y++) { [years addObject:[NSString stringWithFormat:@"%@", @(y)]]; } _yearDataSource = [years copy]; } return _yearDataSource; } - (HJLabelTextFieldView *)headerView { if (_headerView == nil) { _headerView = [[HJLabelTextFieldView alloc] init]; _headerView.titleLabel.text = @"头像"; _headerView.contentTextField.hidden = YES; _headerView.contentImageV.hidden = NO; _headerView.contentImageV.userInteractionEnabled = YES; _headerView.contentImageV.layer.cornerRadius = 25; [_headerView.contentImageV sd_setImageWithURL:self.resumeDataBox.resume[kHJResumeKeyPortrait] placeholderImage:[UIImage imageNamed:@"me_portrait_default"]]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(photoButtonClicked)]; [_headerView.contentImageV addGestureRecognizer:tap]; } return _headerView; } - (HJLabelTextFieldView *)nameView { if (_nameView == nil) { _nameView = [[HJLabelTextFieldView alloc] init]; _nameView.titleLabel.text = @"姓名"; _nameView.hiddenRightImageV = YES; _nameView.contentTextField.placeholder = @"请输入姓名"; _nameView.contentTextField.text = self.resumeDataBox.resume[kHJResumeKeyName]; _nameView.contentTextField.maxLength = 30; } return _nameView; } - (HJLabelTextFieldView *)sexView { if (_sexView == nil) { _sexView = [[HJLabelTextFieldView alloc] init]; _sexView.titleLabel.text = @"性别"; _sexView.contentTextField.text = self.resumeDataBox.resume[kHJResumeKeyGender]; _sexView.contentTextField.userInteractionEnabled = NO; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(sexSelextClicked)]; [_sexView addGestureRecognizer:tap]; } return _sexView; } - (HJLabelTextFieldView *)phoneView { if (_phoneView == nil) { _phoneView = [[HJLabelTextFieldView alloc] init]; _phoneView.titleLabel.text = @"手机号码"; _phoneView.hiddenRightImageV = YES; _phoneView.contentTextField.placeholder = @"请输入手机号码"; _phoneView.contentTextField.keyboardType = UIKeyboardTypeNumberPad; _phoneView.contentTextField.text = self.resumeDataBox.resume[kHJResumeKeyPhone]; } return _phoneView; } - (HJLabelTextFieldView *)yearView { if (_yearView == nil) { _yearView = [[HJLabelTextFieldView alloc] init]; _yearView.titleLabel.text = @"出生年份"; _yearView.contentTextField.userInteractionEnabled = NO; _yearView.contentTextField.text = self.resumeDataBox.resume[kHJResumeKeyBirthYear]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(yearSelextClicked)]; [_yearView addGestureRecognizer:tap]; } return _yearView; } - (HJLabelTextFieldView *)educationView { if (_educationView == nil) { _educationView = [[HJLabelTextFieldView alloc] init]; _educationView.titleLabel.text = @"最高学历"; _educationView.contentTextField.userInteractionEnabled = NO; _educationView.contentTextField.text = self.resumeDataBox.resume[kHJResumeKeyEducation]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(educationSelextClicked)]; [_educationView addGestureRecognizer:tap]; } return _educationView; } - (HJLabelTextFieldView *)WeChatView { if (_WeChatView == nil) { _WeChatView = [[HJLabelTextFieldView alloc] init]; _WeChatView.titleLabel.text = @"微信账号"; _WeChatView.hiddenRightImageV = YES; _WeChatView.contentTextField.placeholder = @"请输入微信账号"; _WeChatView.contentTextField.text = self.resumeDataBox.resume[kHJResumeKeyWechat]; } return _WeChatView; } - (UIButton *)saveButton { if (_saveButton == nil) { _saveButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_saveButton setTitle:@"保存" forState:UIControlStateNormal]; _saveButton.titleLabel.font = [UIFont systemFontOfSize:18]; _saveButton.layer.cornerRadius = 5; _saveButton.layer.masksToBounds = YES; _saveButton.backgroundColor = COLOR_0177FF; [_saveButton addTarget:self action:@selector(saveButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; } return _saveButton; } - (FBScrollLayoutView *)scrollLayoutView { if (_scrollLayoutView == nil) { _scrollLayoutView = [[FBScrollLayoutView alloc] init]; _scrollLayoutView.delegate = self; _scrollLayoutView.backgroundColor = COLOR_F5F5F5; _scrollLayoutView.contentView.backgroundColor = COLOR_F5F5F5; } return _scrollLayoutView; } @end