diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Global/UIComponent/Xib/HalfModalVC.swift b/NadoSunbae-iOS/NadoSunbae-iOS/Global/UIComponent/Xib/HalfModalVC.swift index 84a2bf7b..da7aee46 100644 --- a/NadoSunbae-iOS/NadoSunbae-iOS/Global/UIComponent/Xib/HalfModalVC.swift +++ b/NadoSunbae-iOS/NadoSunbae-iOS/Global/UIComponent/Xib/HalfModalVC.swift @@ -51,6 +51,7 @@ class HalfModalVC: UIViewController { // MARK: Properties private var majorList: [MajorInfoModel] = [] private var filteredList: [MajorInfoModel] = [] + var secondMajorList: [MajorInfoModel] = [] var dataSource: UITableViewDiffableDataSource! var snapshot: NSDiffableDataSourceSnapshot! var selectMajorDelegate: SendUpdateModalDelegate? @@ -58,6 +59,7 @@ class HalfModalVC: UIViewController { var vcType: ModalType = .basic var cellType: MajorCellType = .basic var hasNoMajorOption: Bool = true + var isSecondMajorSheet: Bool = false // MARK: Life Cycle override func viewDidLoad() { @@ -214,7 +216,7 @@ extension HalfModalVC { /// 0번째 인덱스 셀이 초기 선택되도록하는 메서드 private func setUpDefaultStatus() { - if majorList[0].majorName == "학과 무관" { + if majorList[0].majorName == "학과 무관" || majorList[0].majorName == "미진입" { self.majorTV.selectRow(at: IndexPath(row: 0, section: 0), animated: false, scrollPosition: .none) completeBtn.isActivated = true completeBtn.titleLabel?.textColor = UIColor.mainDefault @@ -225,6 +227,9 @@ extension HalfModalVC { private func setUpMajorList(hasNoMajorOption: Bool) { if hasNoMajorOption { majorList = MajorInfo.shared.majorList ?? [] + if isSecondMajorSheet { + majorList = secondMajorList + } } else { var classroomList = MajorInfo.shared.majorList classroomList?.remove(at: 0) diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Global/UIComponent/Xib/MajorTVC.swift b/NadoSunbae-iOS/NadoSunbae-iOS/Global/UIComponent/Xib/MajorTVC.swift index a41091ce..91a9abc3 100644 --- a/NadoSunbae-iOS/NadoSunbae-iOS/Global/UIComponent/Xib/MajorTVC.swift +++ b/NadoSunbae-iOS/NadoSunbae-iOS/Global/UIComponent/Xib/MajorTVC.swift @@ -124,7 +124,7 @@ extension MajorTVC { /// Label에 학과 이름 setting하는 함수 func setData(majorName: MajorInfoModel) { majorNameLabel.text = majorName.majorName - starBtn.isHidden = majorName.majorName == "학과 무관" ? true : false + starBtn.isHidden = majorName.majorName == "학과 무관" || majorName.majorName == "미진입" ? true : false } func setMajorNameLabel(data: String) { diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Screen/Community/VC/CommunityWriteVC.swift b/NadoSunbae-iOS/NadoSunbae-iOS/Screen/Community/VC/CommunityWriteVC.swift index 4470fd43..3bfba976 100644 --- a/NadoSunbae-iOS/NadoSunbae-iOS/Screen/Community/VC/CommunityWriteVC.swift +++ b/NadoSunbae-iOS/NadoSunbae-iOS/Screen/Community/VC/CommunityWriteVC.swift @@ -47,7 +47,7 @@ final class CommunityWriteVC: BaseWritePostVC, View { var disposeBag = DisposeBag() var isEditState: Bool = false var postID: Int? - var majorID: Int = 128 + var majorID: Int = MajorInfo.shared.majorList?[0].majorID ?? 0 var categoryIndex: Int? var originTitle: String? var originContent: String? @@ -349,6 +349,6 @@ extension CommunityWriteVC: UIViewControllerTransitioningDelegate { extension CommunityWriteVC: SendUpdateModalDelegate { func sendUpdate(data: Any) { majorSelectTextField.text = data as? String - majorID = MajorInfo.shared.selectedMajorID ?? 128 + majorID = MajorInfo.shared.selectedMajorID ?? 0 } } diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Screen/Mypage/ProfileSetting/SB/EditProfileVC.storyboard b/NadoSunbae-iOS/NadoSunbae-iOS/Screen/Mypage/ProfileSetting/SB/EditProfileVC.storyboard index 210c5d01..ee1dea95 100644 --- a/NadoSunbae-iOS/NadoSunbae-iOS/Screen/Mypage/ProfileSetting/SB/EditProfileVC.storyboard +++ b/NadoSunbae-iOS/NadoSunbae-iOS/Screen/Mypage/ProfileSetting/SB/EditProfileVC.storyboard @@ -1,8 +1,8 @@ - + - + @@ -20,12 +20,12 @@ - + - + - + @@ -33,10 +33,10 @@ - + - + @@ -45,15 +45,15 @@ - + - + @@ -76,37 +76,66 @@ + + + + + + + + + + + + + + + + - + + + + - + - + + @@ -177,15 +207,15 @@ - + - + @@ -216,15 +247,15 @@ - + - + @@ -237,10 +268,11 @@ - + + @@ -255,15 +287,15 @@ - + - + @@ -294,7 +327,7 @@ + + - + + + + @@ -335,6 +393,7 @@ + @@ -367,16 +426,19 @@ - + + + + @@ -385,14 +447,23 @@ - + + + + + + + + + + @@ -402,6 +473,9 @@ + + + diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Screen/Mypage/ProfileSetting/VC/EditProfileImgModalVC.swift b/NadoSunbae-iOS/NadoSunbae-iOS/Screen/Mypage/ProfileSetting/VC/EditProfileImgModalVC.swift new file mode 100644 index 00000000..9a6796e5 --- /dev/null +++ b/NadoSunbae-iOS/NadoSunbae-iOS/Screen/Mypage/ProfileSetting/VC/EditProfileImgModalVC.swift @@ -0,0 +1,344 @@ +// +// EditProfileImgModalVC.swift +// NadoSunbae +// +// Created by EUNJU on 2022/10/10. +// + +import UIKit +import SnapKit +import Then + +final class EditProfileImgModalVC: BaseVC { + + // MARK: Properties + private let titleLabel = UILabel().then { + $0.text = "프로필 사진 변경" + $0.textColor = .black + $0.font = .PretendardM(size: 16) + } + + private let lineView = UIView().then { + $0.backgroundColor = .mainDefault + } + + private let cancelBtn = UIButton().then { + $0.setImage(UIImage(named: "btnX"), for: .normal) + } + + private let completeBtn = NadoSunbaeBtn().then { + $0.setTitle("선택 완료", for: .normal) + } + + private let profileImgBtn1 = UIButton().then { + $0.setImgByName(name: "grayProfileImage1", selectedName: "Frame 922") + $0.tag = 1 + } + + private let profileImgBtn2 = UIButton().then { + $0.setImgByName(name: "grayProfileImage2", selectedName: "Frame 924") + $0.tag = 2 + } + + private let profileImgBtn3 = UIButton().then { + $0.setImgByName(name: "grayProfileImage3", selectedName: "Frame 921") + $0.tag = 3 + } + + private let profileImgBtn4 = UIButton().then { + $0.setImgByName(name: "grayProfileImage4", selectedName: "Frame 923") + $0.tag = 4 + } + + private let profileImgBtn5 = UIButton().then { + $0.setImgByName(name: "grayProfileImage5", selectedName: "Frame 920") + $0.tag = 5 + } + + private lazy var checkImgView1 = UIImageView().then { + $0.image = UIImage(named: "icon_check_img") + } + + private lazy var checkImgView2 = UIImageView().then { + $0.image = UIImage(named: "icon_check_img") + } + + private lazy var checkImgView3 = UIImageView().then { + $0.image = UIImage(named: "icon_check_img") + } + + private lazy var checkImgView4 = UIImageView().then { + $0.image = UIImage(named: "icon_check_img") + } + + private lazy var checkImgView5 = UIImageView().then { + $0.image = UIImage(named: "icon_check_img") + } + + var originProfileImgID = 0 + var changedProfileImgID = 0 + var defaultSelectedBtn = UIButton() + var selectedProfileID = 0 + var selectNewProfileDelegate: SendUpdateModalDelegate? + + // MARK: Life Cycle + override func viewDidLoad() { + super.viewDidLoad() + configureUI() + configureDefaultProfileUI() + tapCancelBtnAction() + tapCompleteBtnAction() + tapProfile1BtnAction() + tapProfile2BtnAction() + tapProfile3BtnAction() + tapProfile4BtnAction() + tapProfile5BtnAction() + } +} + +// MARK: - UI +extension EditProfileImgModalVC { + private func configureUI() { + view.backgroundColor = .white + view.addSubviews([titleLabel, lineView, cancelBtn, completeBtn, profileImgBtn1, profileImgBtn2, profileImgBtn3, profileImgBtn4, profileImgBtn5, checkImgView1, checkImgView2, checkImgView3, checkImgView4, checkImgView5]) + + titleLabel.snp.makeConstraints { + $0.top.leading.equalToSuperview().inset(24) + } + + cancelBtn.snp.makeConstraints { + $0.top.equalToSuperview().inset(12) + $0.trailing.equalToSuperview().inset(16) + } + + lineView.snp.makeConstraints { + $0.top.equalTo(titleLabel.snp.bottom).offset(15) + $0.leading.trailing.equalToSuperview().inset(16) + $0.height.equalTo(1) + } + + profileImgBtn2.snp.makeConstraints { + $0.centerX.equalToSuperview() + $0.top.equalTo(lineView.snp.bottom).offset(56) + $0.width.height.equalTo(72) + } + + checkImgView2.snp.makeConstraints { + $0.centerX.equalTo(profileImgBtn2.snp.centerX) + $0.top.equalTo(profileImgBtn2.snp.bottom).offset(-10) + $0.width.height.equalTo(20) + } + + profileImgBtn1.snp.makeConstraints { + $0.trailing.equalTo(profileImgBtn2.snp.leading).offset(-16) + $0.centerY.equalTo(profileImgBtn2.snp.centerY) + $0.width.height.equalTo(72) + } + + checkImgView1.snp.makeConstraints { + $0.centerX.equalTo(profileImgBtn1.snp.centerX) + $0.top.equalTo(profileImgBtn1.snp.bottom).offset(-10) + $0.width.height.equalTo(20) + } + + profileImgBtn3.snp.makeConstraints { + $0.leading.equalTo(profileImgBtn2.snp.trailing).offset(16) + $0.centerY.equalTo(profileImgBtn2.snp.centerY) + $0.width.height.equalTo(72) + } + + checkImgView3.snp.makeConstraints { + $0.centerX.equalTo(profileImgBtn3.snp.centerX) + $0.top.equalTo(profileImgBtn3.snp.bottom).offset(-10) + $0.width.height.equalTo(20) + } + + profileImgBtn4.snp.makeConstraints { + $0.top.equalTo(profileImgBtn2.snp.bottom).offset(24) + $0.trailing.equalTo(view.snp.centerX).offset(-8) + $0.width.height.equalTo(72) + } + + checkImgView4.snp.makeConstraints { + $0.centerX.equalTo(profileImgBtn4.snp.centerX) + $0.top.equalTo(profileImgBtn4.snp.bottom).offset(-10) + $0.width.height.equalTo(20) + } + + profileImgBtn5.snp.makeConstraints { + $0.top.equalTo(profileImgBtn2.snp.bottom).offset(24) + $0.leading.equalTo(view.snp.centerX).offset(8) + $0.width.height.equalTo(72) + } + + checkImgView5.snp.makeConstraints { + $0.centerX.equalTo(profileImgBtn5.snp.centerX) + $0.top.equalTo(profileImgBtn5.snp.bottom).offset(-10) + $0.width.height.equalTo(20) + } + + completeBtn.snp.makeConstraints { + $0.leading.trailing.equalToSuperview().inset(32) + $0.bottom.equalToSuperview().inset(34) + $0.height.equalTo(60) + } + + [checkImgView1, checkImgView2, checkImgView3, checkImgView4, checkImgView5].forEach { + $0.isHidden = true + } + + completeBtn.isActivated = originProfileImgID == changedProfileImgID ? false : true + } + + /// 원래 프로필 이미지 선택되어있도록 하는 메서드 + private func configureDefaultProfileUI() { + switch originProfileImgID { + case 1: + defaultSelectedBtn = profileImgBtn1 + case 2: + defaultSelectedBtn = profileImgBtn2 + case 3: + defaultSelectedBtn = profileImgBtn3 + case 4: + defaultSelectedBtn = profileImgBtn4 + case 5: + defaultSelectedBtn = profileImgBtn5 + default: + break + } + + switch changedProfileImgID { + case 1: + profileImgBtn1.isSelected = true + checkImgView1.isHidden = false + case 2: + profileImgBtn2.isSelected = true + checkImgView2.isHidden = false + case 3: + profileImgBtn3.isSelected = true + checkImgView3.isHidden = false + case 4: + profileImgBtn4.isSelected = true + checkImgView4.isHidden = false + case 5: + profileImgBtn5.isSelected = true + checkImgView5.isHidden = false + default: + break + } + } + + /// 선택완료 버튼 활성화 조건 설정 메서드 + private func configureCompleteBtnUI(sender: UIButton) { + completeBtn.isActivated = sender != defaultSelectedBtn + selectedProfileID = sender.tag + } +} + +// MARK: - Custom Methods +extension EditProfileImgModalVC { + + /// x 버튼 액션 설정 메서드 + private func tapCancelBtnAction() { + cancelBtn.press { [weak self] in + self?.dismiss(animated: true) + } + } + + /// 선택완료 버튼 클릭 시 데이터 전달 + private func tapCompleteBtnAction() { + completeBtn.press { [weak self] in + guard let self = self else { return } + + self.selectNewProfileDelegate?.sendUpdate(data: self.selectedProfileID) + self.dismiss(animated: true, completion: { + NotificationCenter.default.post(name: Notification.Name.dismissHalfModal, object: nil) + }) + } + } + + /// 프로필이미지버튼1 액션 설정 메서드 + private func tapProfile1BtnAction() { + profileImgBtn1.press { [weak self] in + guard let self = self else { return } + + self.profileImgBtn1.isSelected.toggle() + self.checkImgView1.isHidden.toggle() + [self.profileImgBtn2, self.profileImgBtn3, self.profileImgBtn4, self.profileImgBtn5].forEach { + $0.isSelected = false + } + [self.checkImgView2, self.checkImgView3, self.checkImgView4, self.checkImgView5].forEach { + $0.isHidden = true + } + self.configureCompleteBtnUI(sender: self.profileImgBtn1) + } + } + + /// 프로필이미지버튼2 액션 설정 메서드 + private func tapProfile2BtnAction() { + profileImgBtn2.press { [weak self] in + guard let self = self else { return } + + self.profileImgBtn2.isSelected.toggle() + self.checkImgView2.isHidden.toggle() + [self.profileImgBtn1, self.profileImgBtn3, self.profileImgBtn4, self.profileImgBtn5].forEach { + $0?.isSelected = false + } + [self.checkImgView1, self.checkImgView3, self.checkImgView4, self.checkImgView5].forEach { + $0.isHidden = true + } + self.configureCompleteBtnUI(sender: self.profileImgBtn2) + } + } + + /// 프로필이미지버튼3 액션 설정 메서드 + private func tapProfile3BtnAction() { + profileImgBtn3.press { [weak self] in + guard let self = self else { return } + + self.profileImgBtn3.isSelected.toggle() + self.checkImgView3.isHidden.toggle() + [self.profileImgBtn1, self.profileImgBtn2, self.profileImgBtn4, self.profileImgBtn5].forEach { + $0.isSelected = false + } + [self.checkImgView1, self.checkImgView2, self.checkImgView4, self.checkImgView5].forEach { + $0.isHidden = true + } + self.configureCompleteBtnUI(sender: self.profileImgBtn3) + } + } + + /// 프로필이미지버튼4 액션 설정 메서드 + private func tapProfile4BtnAction() { + profileImgBtn4.press { [weak self] in + guard let self = self else { return } + + self.profileImgBtn4.isSelected.toggle() + self.checkImgView4.isHidden.toggle() + [self.profileImgBtn1, self.profileImgBtn2, self.profileImgBtn3, self.profileImgBtn5].forEach { + $0.isSelected = false + } + [self.checkImgView1, self.checkImgView2, self.checkImgView3, self.checkImgView5].forEach { + $0.isHidden = true + } + self.configureCompleteBtnUI(sender: self.profileImgBtn4) + } + } + + /// 프로필이미지버튼5 액션 설정 메서드 + private func tapProfile5BtnAction() { + profileImgBtn5.press { [weak self] in + guard let self = self else { return } + + self.profileImgBtn5.isSelected.toggle() + self.checkImgView5.isHidden.toggle() + [self.profileImgBtn1, self.profileImgBtn2, self.profileImgBtn3, self.profileImgBtn4].forEach { + $0.isSelected = false + } + [self.checkImgView1, self.checkImgView2, self.checkImgView3, self.checkImgView4].forEach { + $0?.isHidden = true + } + self.configureCompleteBtnUI(sender: self.profileImgBtn5) + } + } +} diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Screen/Mypage/ProfileSetting/VC/EditProfileVC.swift b/NadoSunbae-iOS/NadoSunbae-iOS/Screen/Mypage/ProfileSetting/VC/EditProfileVC.swift index 8ca61d32..ce661547 100644 --- a/NadoSunbae-iOS/NadoSunbae-iOS/Screen/Mypage/ProfileSetting/VC/EditProfileVC.swift +++ b/NadoSunbae-iOS/NadoSunbae-iOS/Screen/Mypage/ProfileSetting/VC/EditProfileVC.swift @@ -33,6 +33,7 @@ class EditProfileVC: BaseVC { } } @IBOutlet weak var profileImgView: UIImageView! + @IBOutlet weak var profileImgChangBtn: UIButton! @IBOutlet weak var nickNameChangeBtn: UIButton! { didSet { nickNameChangeBtn.isEnabled = false @@ -54,6 +55,8 @@ class EditProfileVC: BaseVC { } } } + @IBOutlet weak var introTextView: NadoTextView! + @IBOutlet weak var introTextCountLabel: UILabel! @IBOutlet weak var firstMajorTextField: NadoTextField! @IBOutlet weak var firstMajorStartTextField: NadoTextField! @IBOutlet weak var secondMajorTextField: NadoTextField! @@ -70,6 +73,9 @@ class EditProfileVC: BaseVC { var userInfo = MypageUserInfoModel() var changedInfo = MypageUserInfoModel() var profileData = EditProfileRequestModel() + var secondMajorList: [MajorInfoModel] = [] + var isPresentingHalfModal = true + var selectedProfileImgID = 0 /// 내가 선택을 위해 '진입하는' 버튼의 태그 var enterBtnTag = 0 @@ -77,9 +83,11 @@ class EditProfileVC: BaseVC { // MARK: LifeCycle override func viewDidLoad() { super.viewDidLoad() + setTextViewDelegate() checkNickNameIsValid() hideKeyboardWhenTappedAround() setSaveBtn() + requestSecondMajorList(univID: UserDefaults.standard.integer(forKey: UserDefaults.Keys.univID), filterType: "secondMajor") } override func viewWillAppear(_ animated: Bool) { @@ -93,24 +101,113 @@ class EditProfileVC: BaseVC { requestCheckNickName(nickName: nickNameTextField.text!) } - @IBAction func tapSelectMajorORStartBtn(_ sender: UIButton) { + @IBAction func tapChangeProfileImgBtn(_ sender: UIButton) { + presentChangeProfileImgVC() + } + + + @IBAction func tapSelectFirstMajorBtn(_ sender: UIButton) { + presentHalfModalView(title: "본전공", hasNoMajorOption: false) + // TODO: SignUpModalVC로 변경 -// guard let slideVC = UIStoryboard.init(name: SelectMajorModalVC.className, bundle: nil).instantiateViewController(withIdentifier: SelectMajorModalVC.className) as? SelectMajorModalVC else { return } -// -// /// 제2전공 진입시기 선택 버튼을 탭했는데, 제2전공이 선택되어있지 않을 경우 -// if !(sender.tag == 3 && secondMajorTextField.text == "미진입") { -// slideVC.enterdBtnTag = sender.tag -// self.enterBtnTag = sender.tag -// -// slideVC.modalPresentationStyle = .custom -// slideVC.transitioningDelegate = self -// slideVC.selectMajorDelegate = self -// -// self.present(slideVC, animated: true, completion: nil) -// } + // guard let slideVC = UIStoryboard.init(name: SelectMajorModalVC.className, bundle: nil).instantiateViewController(withIdentifier: SelectMajorModalVC.className) as? SelectMajorModalVC else { return } + // + // /// 제2전공 진입시기 선택 버튼을 탭했는데, 제2전공이 선택되어있지 않을 경우 + // if !(sender.tag == 3 && secondMajorTextField.text == "미진입") { + // slideVC.enterdBtnTag = sender.tag + // self.enterBtnTag = sender.tag + // + // slideVC.modalPresentationStyle = .custom + // slideVC.transitioningDelegate = self + // slideVC.selectMajorDelegate = self + // + // self.present(slideVC, animated: true, completion: nil) + // } + } + + @IBAction func tapSelectFirstMajorStartBtn(_ sender: UIButton) { + + } + + @IBAction func tapSelectSecondMajorBtn(_ sender: UIButton) { + presentHalfModalView(title: "제2전공", hasNoMajorOption: true, isSecondMajorSheet: true) + } + + @IBAction func tapSelectSecondMajorStartBtn(_ sender: UIButton) { + + } +} + + // MARK: - UI +extension EditProfileVC { + private func configureUI() { + profileImgView.image = UIImage(named: "grayProfileImage\(userInfo.profileImageID)") + profileImgChangBtn.makeRounded(cornerRadius: 8) + nickNameTextField.placeholder = userInfo.nickname + isOnQuestionToggleBtn.isSelected = userInfo.isOnQuestion + introTextView.setDefaultStyle(isUsePlaceholder: true, placeholderText: "나를 한줄로 소개해보세요.") + firstMajorTextField.text = userInfo.firstMajorName + firstMajorStartTextField.text = userInfo.firstMajorStart + secondMajorTextField.text = userInfo.secondMajorName + secondMajorStartTextField.text = userInfo.secondMajorStart + checkSecondMajorStatus() + + introTextView.rx.text.orEmpty + .skip(1) + .observe(on: MainScheduler.asyncInstance) + .subscribe(onNext: { + self.checkIntroText(input: $0) + if self.introTextView.textColor != .gray2 { + self.introTextCountLabel.text = "\($0.count)/최대 40자" + } + }) + .disposed(by: disposeBag) } - // MARK: Custom Methods + private func changeLabelColor(isOK: Bool, label: UILabel) { + label.textColor = isOK ? .gray3 : .red + } + + private func checkSecondMajorStatus() { + if secondMajorTextField.text == "미진입" { + secondMajorStartBtn.setTitle("선택", for: .normal) + secondMajorStartTextField.text = "" + secondMajorStartBtn.isEnabled = false + } else { + secondMajorStartBtn.isEnabled = true + } + } + + private func setNavViewNadoRightBtn(status: Bool) { + self.navView.rightActivateBtn.isActivated = status + self.navView.rightActivateBtn.isEnabled = status + } + + private func setSaveBtn() { + navView.rightActivateBtn.press { + guard let alert = Bundle.main.loadNibNamed(NadoAlertVC.className, owner: self, options: nil)?.first as? NadoAlertVC else { return } + + alert.cancelBtn.press { + alert.dismiss(animated: true, completion: nil) + } + + alert.confirmBtn.press { + self.setProfileData() + self.requestEditProfile(data: self.profileData) + } + + alert.showNadoAlert(vc: self, message: "내 정보를 수정하시겠습니까?", confirmBtnTitle: "저장", cancelBtnTitle: "아니요") + } + } +} + +// MARK: - Custom Methods +extension EditProfileVC { + + /// TextView delegate 설정 + private func setTextViewDelegate() { + introTextView.delegate = self + } /// 닉네임 유효성 검사 private func checkNickNameIsValid() { @@ -147,82 +244,137 @@ class EditProfileVC: BaseVC { .disposed(by: disposeBag) } + /// 한줄소개 글자수 제한 메서드 + private func checkIntroText(input: String) { + if input.count >= 40 { + let index = input.index(input.startIndex, offsetBy: 40) + self.introTextView.text = String(input[.. Bool { return !(firstTextField.text == secondTextField.text) } -} - -// MARK: - UI -extension EditProfileVC { - private func configureUI() { - profileImgView.image = UIImage(named: "profileImage\(userInfo.profileImageID)") - nickNameTextField.placeholder = userInfo.nickname - isOnQuestionToggleBtn.isSelected = userInfo.isOnQuestion - firstMajorTextField.text = userInfo.firstMajorName - firstMajorStartTextField.text = userInfo.firstMajorStart - secondMajorTextField.text = userInfo.secondMajorName - secondMajorStartTextField.text = userInfo.secondMajorStart - checkSecondMajorStatus() + + /// 프로필 사진 변경 바텀시트를 present하는 메서드 + private func presentChangeProfileImgVC() { + let slideVC = EditProfileImgModalVC() + slideVC.modalPresentationStyle = .custom + slideVC.transitioningDelegate = self + slideVC.originProfileImgID = userInfo.profileImageID + slideVC.changedProfileImgID = selectedProfileImgID + slideVC.selectNewProfileDelegate = self + self.isPresentingHalfModal = false + self.present(slideVC, animated: true) } - private func changeLabelColor(isOK: Bool, label: UILabel) { - label.textColor = isOK ? .gray3 : .red + /// HalfModalView를 present하는 메서드 + private func presentHalfModalView(title: String, hasNoMajorOption: Bool, isSecondMajorSheet: Bool = false) { + let slideVC = HalfModalVC() + slideVC.vcType = .search + slideVC.cellType = .star + slideVC.setUpTitleLabel(title) + slideVC.hasNoMajorOption = hasNoMajorOption + slideVC.isSecondMajorSheet = isSecondMajorSheet + slideVC.secondMajorList = self.secondMajorList + slideVC.modalPresentationStyle = .custom + slideVC.transitioningDelegate = self + slideVC.selectMajorDelegate = self + self.isPresentingHalfModal = true + self.present(slideVC, animated: true) } +} + +// MARK: - UITextViewDelegate +extension EditProfileVC: UITextViewDelegate { - private func checkSecondMajorStatus() { - if secondMajorTextField.text == "미진입" { - secondMajorStartBtn.setTitle("선택", for: .normal) - secondMajorStartTextField.text = "" - secondMajorStartBtn.isEnabled = false - } else { - secondMajorStartBtn.isEnabled = true + /// textViewDidBeginEditing + func textViewDidBeginEditing(_ textView: UITextView) { + if textView.textColor == .gray2 { + textView.text = nil + textView.textColor = .mainText } } - private func setNavViewNadoRightBtn(status: Bool) { - self.navView.rightActivateBtn.isActivated = status - self.navView.rightActivateBtn.isEnabled = status + func textViewDidEndEditing(_ textView: UITextView) { + if textView.text.isEmpty { + textView.textColor = .gray2 + textView.text = "나를 한줄로 소개해보세요." + } } - - private func setSaveBtn() { - navView.rightActivateBtn.press { - guard let alert = Bundle.main.loadNibNamed(NadoAlertVC.className, owner: self, options: nil)?.first as? NadoAlertVC else { return } +} + +// MARK: - UIViewControllerTransitioningDelegate +extension EditProfileVC: UIViewControllerTransitioningDelegate { + func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? { + let halfModalVC = HalfModalPresentationController(presentedViewController: presented, presenting: presenting) + halfModalVC.modalHeight = isPresentingHalfModal ? 632 : 449 + + return halfModalVC + } +} + +// MARK: - SendUpdateModalDelegate +extension EditProfileVC: SendUpdateModalDelegate { + func sendUpdate(data: Any) { + if let selectedImgID = data as? Int { + self.profileImgView.image = UIImage(named: "grayProfileImage\(selectedImgID)") + selectedProfileImgID = selectedImgID + } - alert.cancelBtn.press { - alert.dismiss(animated: true, completion: nil) + switch enterBtnTag { + case 0: + if let majorInfoData = data as? MajorInfoModel { + self.firstMajorTextField.text = majorInfoData.majorName + // self.changedInfo.firstMajorID = majorInfoData.majorID } - - alert.confirmBtn.press { - self.setProfileData() - self.requestEditProfile(data: self.profileData) + case 1: + self.firstMajorStartTextField.text = data as? String + self.changedInfo.firstMajorStart = data as? String ?? "" + case 2: + if let majorInfoData = data as? MajorInfoModel { + self.secondMajorTextField.text = majorInfoData.majorName + // self.changedInfo.secondMajorID = majorInfoData.majorID + // if changedInfo.secondMajorID == 1 { + // changedInfo.secondMajorStart = "미진입" + // } + checkSecondMajorStatus() } - - alert.showNadoAlert(vc: self, message: "내 정보를 수정하시겠습니까?", confirmBtnTitle: "저장", cancelBtnTitle: "아니요") + case 3: + self.secondMajorStartTextField.text = data as? String + self.secondMajorStartBtn.setTitle("변경", for: .normal) + self.changedInfo.secondMajorStart = data as? String ?? "" + default: +#if DEVELOPMENT + print("SignUpMajorInfoVC SendUpdateDelegate error") +#endif } + self.judgeSaveBtnState() } } -// MARK:- Network + +// MARK: - Network extension EditProfileVC { private func getMyInfo() { self.activityIndicator.startAnimating() @@ -232,6 +384,7 @@ extension EditProfileVC { if let data = res as? MypageUserInfoModel { self.userInfo = data self.changedInfo = data + self.selectedProfileImgID = data.profileImageID self.configureUI() } self.activityIndicator.stopAnimating() @@ -281,6 +434,21 @@ extension EditProfileVC { } } + /// 제2전공 학과 리스트 조회 메서드 + private func requestSecondMajorList(univID: Int, filterType: String) { + PublicAPI.shared.getMajorListAPI(univID: univID, filterType: filterType) { networkResult in + switch networkResult { + + case .success(let res): + if let data = res as? [MajorInfoModel] { + self.secondMajorList = data + } + default: + self.makeAlert(title: "네트워크 오류로 인해\n데이터를 불러올 수 없습니다.\n다시 시도해 주세요.") + } + } + } + private func requestEditProfile(data: EditProfileRequestModel) { self.activityIndicator.startAnimating() MypageSettingAPI.shared.editProfile(data: data, completion: { networkResult in @@ -309,44 +477,3 @@ extension EditProfileVC { }) } } - -// MARK: - UIViewControllerTransitioningDelegate -extension EditProfileVC: UIViewControllerTransitioningDelegate { - func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? { - HalfModalPresentationController(presentedViewController: presented, presenting: presenting) - } -} - -// MARK: - SendUpdateModalDelegate -extension EditProfileVC: SendUpdateModalDelegate { - func sendUpdate(data: Any) { - switch enterBtnTag { - case 0: - if let majorInfoData = data as? MajorInfoModel { -// self.firstMajorTextField.text = majorInfoData.majorName -// self.changedInfo.firstMajorID = majorInfoData.majorID - } - case 1: - self.firstMajorStartTextField.text = data as? String - self.changedInfo.firstMajorStart = data as? String ?? "" - case 2: - if let majorInfoData = data as? MajorInfoModel { - self.secondMajorTextField.text = majorInfoData.majorName -// self.changedInfo.secondMajorID = majorInfoData.majorID -// if changedInfo.secondMajorID == 1 { -// changedInfo.secondMajorStart = "미진입" -// } - checkSecondMajorStatus() - } - case 3: - self.secondMajorStartTextField.text = data as? String - self.secondMajorStartBtn.setTitle("변경", for: .normal) - self.changedInfo.secondMajorStart = data as? String ?? "" - default: - #if DEVELOPMENT - print("SignUpMajorInfoVC SendUpdateDelegate error") - #endif - } - self.judgeSaveBtnState() - } -} diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Screen/Review/VC/HalfModalPresentationController.swift b/NadoSunbae-iOS/NadoSunbae-iOS/Screen/Review/VC/HalfModalPresentationController.swift index 311d9984..8ffdd24f 100644 --- a/NadoSunbae-iOS/NadoSunbae-iOS/Screen/Review/VC/HalfModalPresentationController.swift +++ b/NadoSunbae-iOS/NadoSunbae-iOS/Screen/Review/VC/HalfModalPresentationController.swift @@ -12,6 +12,7 @@ class HalfModalPresentationController: UIPresentationController { // MARK: Properties let backView = UIView() var tapGestureRecognizer: UITapGestureRecognizer = UITapGestureRecognizer() + var modalHeight: CGFloat = 632 /// 뒷 배경 블랙 블러 처리 override init(presentedViewController: UIViewController, presenting presentingViewController: UIViewController?) { @@ -25,9 +26,9 @@ class HalfModalPresentationController: UIPresentationController { /// 보여질 하프 모달 뷰 프레임 설정(높이 180 ~ 632 슬라이드, 보여지는 높이는 632) override var frameOfPresentedViewInContainerView: CGRect { - CGRect(origin: CGPoint(x: 0, y: self.containerView!.frame.height * 180/812), + CGRect(origin: CGPoint(x: 0, y: self.containerView!.frame.height * (812 - modalHeight)/812), size: CGSize(width: self.containerView!.frame.width, height: self.containerView!.frame.height * - 632/812)) + modalHeight/812)) } /// present 시작할 때 diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 920.imageset/Contents.json b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 920.imageset/Contents.json new file mode 100644 index 00000000..ba31e9c9 --- /dev/null +++ b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 920.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame 920.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame 920@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame 920@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 920.imageset/Frame 920.png b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 920.imageset/Frame 920.png new file mode 100644 index 00000000..40494736 Binary files /dev/null and b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 920.imageset/Frame 920.png differ diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 920.imageset/Frame 920@2x.png b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 920.imageset/Frame 920@2x.png new file mode 100644 index 00000000..d15671aa Binary files /dev/null and b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 920.imageset/Frame 920@2x.png differ diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 920.imageset/Frame 920@3x.png b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 920.imageset/Frame 920@3x.png new file mode 100644 index 00000000..7d53a220 Binary files /dev/null and b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 920.imageset/Frame 920@3x.png differ diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 921.imageset/Contents.json b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 921.imageset/Contents.json new file mode 100644 index 00000000..3299b710 --- /dev/null +++ b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 921.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame 921.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame 921@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame 921@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 921.imageset/Frame 921.png b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 921.imageset/Frame 921.png new file mode 100644 index 00000000..f604ced5 Binary files /dev/null and b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 921.imageset/Frame 921.png differ diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 921.imageset/Frame 921@2x.png b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 921.imageset/Frame 921@2x.png new file mode 100644 index 00000000..f5fda45a Binary files /dev/null and b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 921.imageset/Frame 921@2x.png differ diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 921.imageset/Frame 921@3x.png b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 921.imageset/Frame 921@3x.png new file mode 100644 index 00000000..84ba919a Binary files /dev/null and b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 921.imageset/Frame 921@3x.png differ diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 922.imageset/Contents.json b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 922.imageset/Contents.json new file mode 100644 index 00000000..a7148776 --- /dev/null +++ b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 922.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame 922.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame 922@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame 922@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 922.imageset/Frame 922.png b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 922.imageset/Frame 922.png new file mode 100644 index 00000000..a855b247 Binary files /dev/null and b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 922.imageset/Frame 922.png differ diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 922.imageset/Frame 922@2x.png b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 922.imageset/Frame 922@2x.png new file mode 100644 index 00000000..8a0c8f58 Binary files /dev/null and b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 922.imageset/Frame 922@2x.png differ diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 922.imageset/Frame 922@3x.png b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 922.imageset/Frame 922@3x.png new file mode 100644 index 00000000..ac5d9ec0 Binary files /dev/null and b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 922.imageset/Frame 922@3x.png differ diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 923.imageset/Contents.json b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 923.imageset/Contents.json new file mode 100644 index 00000000..164121ee --- /dev/null +++ b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 923.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame 923.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame 923@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame 923@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 923.imageset/Frame 923.png b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 923.imageset/Frame 923.png new file mode 100644 index 00000000..6670129d Binary files /dev/null and b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 923.imageset/Frame 923.png differ diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 923.imageset/Frame 923@2x.png b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 923.imageset/Frame 923@2x.png new file mode 100644 index 00000000..40eddd84 Binary files /dev/null and b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 923.imageset/Frame 923@2x.png differ diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 923.imageset/Frame 923@3x.png b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 923.imageset/Frame 923@3x.png new file mode 100644 index 00000000..88afd0d6 Binary files /dev/null and b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 923.imageset/Frame 923@3x.png differ diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 924.imageset/Contents.json b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 924.imageset/Contents.json new file mode 100644 index 00000000..48dcb4df --- /dev/null +++ b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 924.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame 924.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame 924@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame 924@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 924.imageset/Frame 924.png b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 924.imageset/Frame 924.png new file mode 100644 index 00000000..aa945e29 Binary files /dev/null and b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 924.imageset/Frame 924.png differ diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 924.imageset/Frame 924@2x.png b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 924.imageset/Frame 924@2x.png new file mode 100644 index 00000000..5a8539c8 Binary files /dev/null and b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 924.imageset/Frame 924@2x.png differ diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 924.imageset/Frame 924@3x.png b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 924.imageset/Frame 924@3x.png new file mode 100644 index 00000000..9517a52d Binary files /dev/null and b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/Frame 924.imageset/Frame 924@3x.png differ diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/icon_check_img.imageset/Contents.json b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/icon_check_img.imageset/Contents.json new file mode 100644 index 00000000..b0e992f9 --- /dev/null +++ b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/icon_check_img.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "icon_check_img.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "icon_check_img@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "icon_check_img@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/icon_check_img.imageset/icon_check_img.png b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/icon_check_img.imageset/icon_check_img.png new file mode 100644 index 00000000..80f6ea0b Binary files /dev/null and b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/icon_check_img.imageset/icon_check_img.png differ diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/icon_check_img.imageset/icon_check_img@2x.png b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/icon_check_img.imageset/icon_check_img@2x.png new file mode 100644 index 00000000..2e1ed1e6 Binary files /dev/null and b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/icon_check_img.imageset/icon_check_img@2x.png differ diff --git a/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/icon_check_img.imageset/icon_check_img@3x.png b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/icon_check_img.imageset/icon_check_img@3x.png new file mode 100644 index 00000000..95cc31c1 Binary files /dev/null and b/NadoSunbae-iOS/NadoSunbae-iOS/Support/Assets.xcassets/ProfileImage/icon_check_img.imageset/icon_check_img@3x.png differ diff --git a/NadoSunbae-iOS/NadoSunbae.xcodeproj/project.pbxproj b/NadoSunbae-iOS/NadoSunbae.xcodeproj/project.pbxproj index cecac70c..9d4ec013 100644 --- a/NadoSunbae-iOS/NadoSunbae.xcodeproj/project.pbxproj +++ b/NadoSunbae-iOS/NadoSunbae.xcodeproj/project.pbxproj @@ -227,6 +227,7 @@ 775728AC27D65E8900148C9A /* OnboardingDataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 775728AB27D65E8900148C9A /* OnboardingDataModel.swift */; }; 775728B127D6617300148C9A /* OnboardingVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 775728B027D6617300148C9A /* OnboardingVC.swift */; }; 775BC98228CDD38E00419560 /* CodeBaseTVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 775BC98128CDD38E00419560 /* CodeBaseTVC.swift */; }; + 776B73DA28F4017E001216E7 /* EditProfileImgModalVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 776B73D928F4017E001216E7 /* EditProfileImgModalVC.swift */; }; 777ABF74278C7947002D3214 /* ReviewMainImgTVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 777ABF72278C7947002D3214 /* ReviewMainImgTVC.swift */; }; 777ABF75278C7947002D3214 /* ReviewMainImgTVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 777ABF73278C7947002D3214 /* ReviewMainImgTVC.xib */; }; 777ABF7C278C844E002D3214 /* ReviewMainLinkTVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 777ABF7A278C844E002D3214 /* ReviewMainLinkTVC.swift */; }; @@ -563,6 +564,7 @@ 775728B027D6617300148C9A /* OnboardingVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingVC.swift; sourceTree = ""; }; 775BAFD627D9353700DB37EB /* UserAuthInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAuthInfo.swift; sourceTree = ""; }; 775BC98128CDD38E00419560 /* CodeBaseTVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodeBaseTVC.swift; sourceTree = ""; }; + 776B73D928F4017E001216E7 /* EditProfileImgModalVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditProfileImgModalVC.swift; sourceTree = ""; }; 777ABF72278C7947002D3214 /* ReviewMainImgTVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewMainImgTVC.swift; sourceTree = ""; }; 777ABF73278C7947002D3214 /* ReviewMainImgTVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ReviewMainImgTVC.xib; sourceTree = ""; }; 777ABF7A278C844E002D3214 /* ReviewMainLinkTVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewMainLinkTVC.swift; sourceTree = ""; }; @@ -1897,6 +1899,7 @@ isa = PBXGroup; children = ( C740A85A27C7C58500C4518A /* EditProfileVC.swift */, + 776B73D928F4017E001216E7 /* EditProfileImgModalVC.swift */, ); path = VC; sourceTree = ""; @@ -2210,6 +2213,7 @@ 331C5382279629620052B309 /* BaseQuestionTVC.swift in Sources */, 77AA831A28A95B3D00985B80 /* ClassroomMainHeaderView.swift in Sources */, 33C1B8A327974A4F004BABEC /* ClassroomQuestionDetailData.swift in Sources */, + 776B73DA28F4017E001216E7 /* EditProfileImgModalVC.swift in Sources */, 33D9EA8F27D75335000AF8DB /* NotificationInfo.swift in Sources */, 331364BF27861D0600E0C118 /* Adjusted+.swift in Sources */, 777ABF89278CB793002D3214 /* ReviewStickyHeaderView.swift in Sources */,