From 7b50cd0a07c126a50d89b0206643bf82d84f3375 Mon Sep 17 00:00:00 2001 From: KimJisoo Date: Mon, 3 Oct 2022 18:40:04 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[FEAT]=20-=20#140=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=ED=95=84=20=EC=88=98=EC=A0=95=ED=95=98=EA=B8=B0=20=EB=B7=B0=20?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=95=84=EC=9B=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Fillin-iOS.xcodeproj/project.pbxproj | 4 + .../btnAddProfile.imageset/Contents.json | 23 ++ .../btn_add_profile.png | Bin 0 -> 2220 bytes .../btn_add_profile@2x.png | Bin 0 -> 4457 bytes .../btn_add_profile@3x.png | Bin 0 -> 6348 bytes .../btnClear.imageset/Contents.json | 23 ++ .../btnClear.imageset/btn_clear.png | Bin 0 -> 229 bytes .../btnClear.imageset/btn_clear@2x.png | Bin 0 -> 262 bytes .../btnClear.imageset/btn_clear@3x.png | Bin 0 -> 403 bytes .../Constants/Assets+Generated.swift | 2 + .../EditProfileViewController.swift | 271 ++++++++++++++++++ 11 files changed, 323 insertions(+) create mode 100644 Fillin-iOS/Fillin-iOS/Resources/Assets/Assets.xcassets/btnAddProfile.imageset/Contents.json create mode 100644 Fillin-iOS/Fillin-iOS/Resources/Assets/Assets.xcassets/btnAddProfile.imageset/btn_add_profile.png create mode 100644 Fillin-iOS/Fillin-iOS/Resources/Assets/Assets.xcassets/btnAddProfile.imageset/btn_add_profile@2x.png create mode 100644 Fillin-iOS/Fillin-iOS/Resources/Assets/Assets.xcassets/btnAddProfile.imageset/btn_add_profile@3x.png create mode 100644 Fillin-iOS/Fillin-iOS/Resources/Assets/Assets.xcassets/btnClear.imageset/Contents.json create mode 100644 Fillin-iOS/Fillin-iOS/Resources/Assets/Assets.xcassets/btnClear.imageset/btn_clear.png create mode 100644 Fillin-iOS/Fillin-iOS/Resources/Assets/Assets.xcassets/btnClear.imageset/btn_clear@2x.png create mode 100644 Fillin-iOS/Fillin-iOS/Resources/Assets/Assets.xcassets/btnClear.imageset/btn_clear@3x.png create mode 100644 Fillin-iOS/Fillin-iOS/Sources/ViewControllers/MyPageViewController/EditProfileViewController.swift diff --git a/Fillin-iOS/Fillin-iOS.xcodeproj/project.pbxproj b/Fillin-iOS/Fillin-iOS.xcodeproj/project.pbxproj index 8a42002..271b131 100644 --- a/Fillin-iOS/Fillin-iOS.xcodeproj/project.pbxproj +++ b/Fillin-iOS/Fillin-iOS.xcodeproj/project.pbxproj @@ -125,6 +125,7 @@ E89934F727CD1EDE00DCB1A8 /* OnboardingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E89934F627CD1EDE00DCB1A8 /* OnboardingViewController.swift */; }; E89934FA27CD2AA600DCB1A8 /* OnboardingDataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E89934F927CD2AA600DCB1A8 /* OnboardingDataModel.swift */; }; E89934FD27CD2BCB00DCB1A8 /* OnboardingCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E89934FC27CD2BCB00DCB1A8 /* OnboardingCollectionViewCell.swift */; }; + E8C1E0D028EABCEB006AB2C7 /* EditProfileViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8C1E0CF28EABCEB006AB2C7 /* EditProfileViewController.swift */; }; E8DDE18528DEDECF00CC000D /* ReportPopUpViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8DDE18428DEDECF00CC000D /* ReportPopUpViewController.swift */; }; E8EB7A5628C090AB0091DA22 /* TermsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8EB7A5528C090AB0091DA22 /* TermsViewController.swift */; }; E8EB7A5828C093080091DA22 /* TermTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8EB7A5728C093080091DA22 /* TermTableViewCell.swift */; }; @@ -253,6 +254,7 @@ E89934F627CD1EDE00DCB1A8 /* OnboardingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingViewController.swift; sourceTree = ""; }; E89934F927CD2AA600DCB1A8 /* OnboardingDataModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingDataModel.swift; sourceTree = ""; }; E89934FC27CD2BCB00DCB1A8 /* OnboardingCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingCollectionViewCell.swift; sourceTree = ""; }; + E8C1E0CF28EABCEB006AB2C7 /* EditProfileViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditProfileViewController.swift; sourceTree = ""; }; E8DDE18428DEDECF00CC000D /* ReportPopUpViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportPopUpViewController.swift; sourceTree = ""; }; E8EB7A5528C090AB0091DA22 /* TermsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TermsViewController.swift; sourceTree = ""; }; E8EB7A5728C093080091DA22 /* TermTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TermTableViewCell.swift; sourceTree = ""; }; @@ -540,6 +542,7 @@ 6F3B872B27968AEB00A4BD07 /* MyPageViewController.swift */, E8EB7A5528C090AB0091DA22 /* TermsViewController.swift */, E8EB7A5728C093080091DA22 /* TermTableViewCell.swift */, + E8C1E0CF28EABCEB006AB2C7 /* EditProfileViewController.swift */, ); path = MyPageViewController; sourceTree = ""; @@ -1050,6 +1053,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + E8C1E0D028EABCEB006AB2C7 /* EditProfileViewController.swift in Sources */, 6F3B87CB27968AEB00A4BD07 /* LoginViewController.swift in Sources */, 6F3B878927968AEB00A4BD07 /* GenericResponse.swift in Sources */, 77EB42212797D17600C726D8 /* FlimSelectAPI.swift in Sources */, diff --git a/Fillin-iOS/Fillin-iOS/Resources/Assets/Assets.xcassets/btnAddProfile.imageset/Contents.json b/Fillin-iOS/Fillin-iOS/Resources/Assets/Assets.xcassets/btnAddProfile.imageset/Contents.json new file mode 100644 index 0000000..f032b41 --- /dev/null +++ b/Fillin-iOS/Fillin-iOS/Resources/Assets/Assets.xcassets/btnAddProfile.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "btn_add_profile.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "btn_add_profile@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "btn_add_profile@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Fillin-iOS/Fillin-iOS/Resources/Assets/Assets.xcassets/btnAddProfile.imageset/btn_add_profile.png b/Fillin-iOS/Fillin-iOS/Resources/Assets/Assets.xcassets/btnAddProfile.imageset/btn_add_profile.png new file mode 100644 index 0000000000000000000000000000000000000000..58754935cbb1d61b7273a62b77d0b90f2b3c788a GIT binary patch literal 2220 zcmV;d2vhfoP)wW2<7V z&{jmNwbK@-FXJDb*49?B(<-6WsjaPPrBu-RQfo_qRzkpFHoM#36I~i1KteWw^fR+2 zoBbv3m*@GtJTO3bqI%~0{fw0;=d#+*2F(^P%Q&Z)I1qD&7 z%2uXmH5w~P5|0xS=>arKMkSJWI1+h^dKtuRd-BPaHxC{92?dGrHER+;Y@9}Wnqb)_ zgiLk?`H9~md8f0iyT@L=XYaoA8#Zpdj6#GUc9J&kDT1b-@aMZei-bXiXPCFZdW)AV zvG~*9!~)#-l>>E#jC4bjKUVcgB)BI>k|*}<-|t+pa%Bq|WA@b6>KllET)Ok0@KT>j~eGI zW%6kQ`{$rO2`ibMHM?5ENg&XS?|1iedt2cC2VT3&k}ij1v9+_~x%l5r`2d9};I?V{ z8Gol`zb@?WvLr#0o4|@FjH#^L)=E*-CeP3MEeSh{_O^~A;cP{Lf!6G|B*CG@;ci8N zqettl6iJo|=Wa{FM9MMF8yPeI@L`|>4xXkq0z+9 z=bM{nsqTrI1`!6gC0VC4`=gIPZWBY``gIi<`qb2D{P*L1Jz`>Fdg9nIZO>kL5 zx?w(kTj#bUL6C;e&YZC!5x^pE`Xdm4_E)cd*X6H^569~`#)La!HoPaHKlb+a>dj_z zHxijMr$2cB4m1Y9;-IIeCm!^XE>~a1g$ox&7YN}0fPe#y5$)~mz3#X#!I5fvk3HZB zn>S|vY0d|5cz(8Z%M&Tk2T=(4=6p*x1hz?zXA`eq{~;vn)Rbw{WdHu>zjUk0Oi3sN z*zGok;|Mj5))Q*a$aXNOdG;ASyuSA8D|6v>QOUyJgJ91#4UJ~2+1&Ue5)qrt&JYBz z7Bx-ajjfwE>lPFjC*dyP!fq;u&*XABy>4Aa%F_RqT7-5xs;V!cATeSfD-gh1ix!r+ zT@&2Y^IC3BPC`LmUK9!eFokqM@&yF}uohTtsOzQ`kERIkE7q1L!GT0XrJ6|N!M#gD z;(wINi9r#0#~m%cw9Pio*WgKq5YufZPfn2265=w+QIsV`r&A#j=;`foB_<{+Lp4Q= z1U8<;#c(zWP19GjTCEI;!13e9+cIa**4DrGt`Sef4sUH58XMaLYk_-a8;x3cpO`pB z39m;EzcY7WyU~DW4V0Xeq?SZPSR}9&VQ<~KJ_84W0^Nn|+y8=laa~+g96waF6Yo3t zL7$-8t0T|z!R`FRXf!G(Mn*P)KKBp1ZaM09R6p~_P-dwHa^&#gInXByi;6`FgWis= zZ?jNR>5|)12!|T-{`!|V^cw+O^})hIElKi+;M~0!zyaAqQ>P~H&}cNY7@6YH04ttA zT~q+aU}ahJ?$;tpYKHSW`$?ip5gB=MrO6bJ#t0Z>aNb3f?oyba50QyFp}3-d#lyR} zn%{!Uf~&4tRi@)uw!g-pUnGR@W*RciEh;Gq$x{K2o|&I-dI{2*iQ0q=!pO zr4-9A9jYBU%nx*t9GA0x?OH{7`5IBe_hRB6Xv$Y7tXo?lCs{6cxayA)W1>P8$o8tL z-i?nv7PL5wKL{4|MWDMq@`3(}tQYn>SD41G8U)0_QM;=~2QKQ1K==2MkMvhYehIa8 zOV5USdI51TP1L>gVg?>$&QbJ)MZOmP`W&r;zZlfXq^GCtK8EKb*sq}w0OClJbi3!t zMzb+3Exl4AjmY(`oYe*ZQS0a(}*BwCE~ zod1E0H6(N)-|1^Q5ZqCJ@4fPWJoJzjgiTGJ$|)3zlRU@m3PhZMsA)C#(*!s*51DI7 z>_Xo2!o`c-cDtQ{q|(5r2_W7(efso?cxxnA$mQ1&K{oI#+X#`0arZRAP=IJxUtb1x uX*Eu~Od0fC2+P~>=GH28{cu-q27tE#@X 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 literal 0 HcmV?d00001 diff --git a/Fillin-iOS/Fillin-iOS/Resources/Assets/Assets.xcassets/btnAddProfile.imageset/btn_add_profile@3x.png b/Fillin-iOS/Fillin-iOS/Resources/Assets/Assets.xcassets/btnAddProfile.imageset/btn_add_profile@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..fb82b319d260c7258b42b43e35a51f86a1d3c6c5 GIT binary patch literal 6348 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 O0000syaea$&C_FX*hr1yQo WuAIrceK!DI!QkoY=d#Wzp$P!?eop}a literal 0 HcmV?d00001 diff --git a/Fillin-iOS/Fillin-iOS/Resources/Assets/Assets.xcassets/btnClear.imageset/btn_clear@2x.png b/Fillin-iOS/Fillin-iOS/Resources/Assets/Assets.xcassets/btnClear.imageset/btn_clear@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0146ef1ab6d12733a36c47570c80e1436fcdd730 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBI14-?iy0WiR6&^0Gf3qFP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{%lVd$B+ufx6|%&H7M}3y8B;}z9#)$Y-;m{ zHLE!m-?`HKhFRbC_ksDnCo*`?+x$p<>FIHTBT}XDdg+}TKa+ihR&FRS&a>Lw=i~KM zY>LLxi3`P6=qYoaQ=1&5u=~t>r=uzRM0E5%hwYf<-#8spWNg~#}JF!JWL>|OFKF#AOM%AQ1twnUqoj7Hxlv@8~L*adVZgQu&X%Q~lo FCIFipVA=ox literal 0 HcmV?d00001 diff --git a/Fillin-iOS/Fillin-iOS/Resources/Assets/Assets.xcassets/btnClear.imageset/btn_clear@3x.png b/Fillin-iOS/Fillin-iOS/Resources/Assets/Assets.xcassets/btnClear.imageset/btn_clear@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..d3bdaa7c6129ccd3bbc6c5d85ae8fb78714482ec GIT binary patch literal 403 zcmeAS@N?(olHy`uVBq!ia0vp^W+2SL1|)l2v+e>Z&H|6fVg?393lL^>oo1K-6l5$8 za(7}_cTVOdki(Mh=h#QZ~74 zQ=ej(@2x);0)mFKc0W1wTVa8c-28(-^o}twG_b6D|GrK_(dE@orpL>R>pV`#t_*Lv zV{_}F*YRsN+k(&8-@d-!^FcoK!zV9n^{?uVF*cv8Y5!|oZV$_xqLWKF_;x-Ca`D-j zv!p|!=%%Nj`;$#mmA;)w)pu<=&g?c literal 0 HcmV?d00001 diff --git a/Fillin-iOS/Fillin-iOS/Resources/Constants/Assets+Generated.swift b/Fillin-iOS/Fillin-iOS/Resources/Constants/Assets+Generated.swift index 12541e6..dc19357 100644 --- a/Fillin-iOS/Fillin-iOS/Resources/Constants/Assets+Generated.swift +++ b/Fillin-iOS/Fillin-iOS/Resources/Constants/Assets+Generated.swift @@ -24,8 +24,10 @@ internal enum Asset { internal static let accentColor = ColorAsset(name: "AccentColor") internal static let appleLogo = ImageAsset(name: "AppleLogo") internal static let basicProfile = ImageAsset(name: "basicProfile") + internal static let btnAddProfile = ImageAsset(name: "btnAddProfile") internal static let btnAddphhoto = ImageAsset(name: "btnAddphhoto") internal static let btnBack = ImageAsset(name: "btnBack") + internal static let btnClear = ImageAsset(name: "btnClear") internal static let btnHome = ImageAsset(name: "btnHome") internal static let btnHomeFloating = ImageAsset(name: "btnHomeFloating") internal static let btnLike = ImageAsset(name: "btnLike") diff --git a/Fillin-iOS/Fillin-iOS/Sources/ViewControllers/MyPageViewController/EditProfileViewController.swift b/Fillin-iOS/Fillin-iOS/Sources/ViewControllers/MyPageViewController/EditProfileViewController.swift new file mode 100644 index 0000000..58a07e2 --- /dev/null +++ b/Fillin-iOS/Fillin-iOS/Sources/ViewControllers/MyPageViewController/EditProfileViewController.swift @@ -0,0 +1,271 @@ +// +// EditProfileViewController.swift +// Fillin-iOS +// +// Created by 김지수 on 2022/10/03. +// + +import UIKit + +import SnapKit +import Then + +// MARK: - EditProfileViewController +class EditProfileViewController: UIViewController { + + // MARK: - Components + let navigationBar = FilinNavigationBar() + let profileImage = UIImageView() + let editProfileButtonImage = UIButton() + let editProfileLabel = UILabel() + let nicknameLabel = UILabel() + let nicknameTextField = UITextField() + let nicknameBorder = UIView() + let cameraLabel = UILabel() + let cameraTextField = UITextField() + let cameraBorder = UIView() + let changeProfileButton = UIButton() + final let maxLength = 10 + + // MARK: - LifeCycle + override func viewDidLoad() { + super.viewDidLoad() + layout() + setUI() + attribute() + attributePlaceholder() + NotificationCenter.default.addObserver(self, + selector: #selector(textDidChange(_:)), + name: UITextField.textDidChangeNotification, + object: nicknameTextField) + NotificationCenter.default.addObserver(self, + selector: #selector(textDidChange(_:)), + name: UITextField.textDidChangeNotification, + object: cameraTextField) + + } +} +// MARK: - Extensions +extension EditProfileViewController { + func layout() { + layoutNavigaionBar() + layoutProfileImage() + layoutEditProfileButtonImage() + layoutEditProfileLabel() + layoutNicknameLabel() + layoutNicknameTextField() + layoutNicknameBorder() + layoutCameraLabel() + layoutCameraTextField() + layoutCameraBorder() + layoutChangeProfileButton() + } + func layoutNavigaionBar() { + self.view.add(navigationBar) { + self.navigationBar.popViewController = { + self.navigationController?.popViewController(animated: true) + } + $0.snp.makeConstraints { make in + make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top) + make.leading.trailing.equalToSuperview() + make.height.equalTo(50) + } + } + } + func layoutProfileImage() { + self.view.add(profileImage) { + $0.setBorder(borderColor: .fillinWhite, borderWidth: 1) + $0.setRounded(radius: 27.5) + $0.image = Asset.noSearch.image + $0.contentMode = .scaleAspectFill + $0.clipsToBounds = true + $0.snp.makeConstraints { make in + make.top.equalTo(self.navigationBar.snp.bottom).offset(21) + make.centerX.equalToSuperview() + make.width.height.equalTo(55) + } + } + } + func layoutEditProfileButtonImage() { + self.view.add(editProfileButtonImage) { + $0.setImage(Asset.btnAddProfile.image, for: .normal) + $0.addTarget(self, action: #selector(self.profileChangeButtonClicked), for: .touchUpInside) + $0.snp.makeConstraints { make in + make.top.leading.trailing.bottom.equalTo(self.profileImage) + make.width.height.equalTo(55) + } + } + } + func layoutEditProfileLabel() { + self.view.add(editProfileLabel) { + $0.setupLabel(text: "프로필 사진 바꾸기", color: .grey3, font: .body1) + $0.snp.makeConstraints { make in + make.top.equalTo(self.editProfileButtonImage.snp.bottom).offset(12) + make.centerX.equalToSuperview() + } + } + } + func layoutNicknameLabel() { + self.view.add(nicknameLabel) { + $0.setupLabel(text: "닉네임", color: .fillinWhite, font: .subhead3) + $0.snp.makeConstraints { make in + make.top.equalTo(self.editProfileLabel.snp.bottom).offset(28) + make.leading.equalToSuperview().offset(18) + } + } + } + func layoutNicknameTextField() { + self.view.add(nicknameTextField) { + $0.placeholder = "닉네임을 입력해주세요. (10자 이하)" + $0.font = .subhead1 + $0.textColor = .fillinWhite + $0.autocorrectionType = .no + $0.autocapitalizationType = .none + $0.clearButtonMode = .always + if let clearButton = self.nicknameTextField.value(forKeyPath: "_clearButton") as? UIButton { + clearButton.setImage(Asset.btnClear.image, for: .normal) + $0.snp.makeConstraints { make in + make.top.equalTo(self.nicknameLabel.snp.bottom).offset(16) + make.centerX.equalToSuperview() + make.leading.equalToSuperview().offset(18) + } + } + } + } + func layoutNicknameBorder() { + self.view.add(nicknameBorder) { + $0.backgroundColor = .darkGrey1 + $0.snp.makeConstraints { make in + make.top.equalTo(self.nicknameTextField.snp.bottom).offset(6) + make.centerX.equalToSuperview() + make.leading.equalToSuperview().offset(18) + make.height.equalTo(1) + } + } + } + func layoutCameraLabel() { + self.view.add(cameraLabel) { + $0.setupLabel(text: "카메라", color: .fillinWhite, font: .subhead3) + $0.snp.makeConstraints { make in + make.top.equalTo(self.nicknameBorder.snp.bottom).offset(40) + make.leading.equalToSuperview().offset(18) + } + } + } + func layoutCameraTextField() { + self.view.add(cameraTextField) { + $0.placeholder = "사용 중인 카메라 이름을 입력해주세요." + $0.font = .subhead1 + $0.textColor = .fillinWhite + $0.autocorrectionType = .no + $0.autocapitalizationType = .none + $0.clearButtonMode = .always + if let clearButton = self.cameraTextField.value(forKeyPath: "_clearButton") as? UIButton { + clearButton.setImage(Asset.btnClear.image, for: .normal) + $0.snp.makeConstraints { make in + make.top.equalTo(self.cameraLabel.snp.bottom).offset(16) + make.centerX.equalToSuperview() + make.leading.equalToSuperview().offset(18) + } + } + } + } + func layoutCameraBorder() { + self.view.add(cameraBorder) { + $0.backgroundColor = .darkGrey1 + $0.snp.makeConstraints { make in + make.top.equalTo(self.cameraTextField.snp.bottom).offset(6) + make.centerX.equalToSuperview() + make.leading.equalToSuperview().offset(18) + make.height.equalTo(1) + } + } + } + func layoutChangeProfileButton() { + self.view.add(changeProfileButton) { + $0.setupButton(title: "프로필 변경", + color: .grey4, + font: .headline, + backgroundColor: .textviewGrey, + state: .normal, + radius: 0) + $0.isUserInteractionEnabled = false + $0.addTarget(self, action: #selector(self.sendButtonClicked), for: .touchUpInside) + $0.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.leading.trailing.equalToSuperview() + make.bottom.equalToSuperview() + make.height.equalTo(80) + } + } + } + func setUI() { + self.view.backgroundColor = .fillinBlack + } + func attribute() { + self.nicknameTextField.delegate = self + self.cameraTextField.delegate = self + } + func attributePlaceholder() { + nicknameTextField.attributedPlaceholder = NSAttributedString(string : "닉네임을 입력해주세요. (10자 이하)", + attributes : [NSAttributedString.Key.foregroundColor: UIColor.grey4, + NSAttributedString.Key.font : UIFont.body1]) + cameraTextField.attributedPlaceholder = NSAttributedString(string : "사용 중인 카메라 이름을 입력해주세요.", + attributes : [NSAttributedString.Key.foregroundColor: UIColor.grey4, + NSAttributedString.Key.font :UIFont.body1]) + } + @objc func profileChangeButtonClicked() { + print("프로필 이미지 변경하기") + } + @objc func sendButtonClicked() { + print("프로필 변경하기") + } +} + +// MARK: - UITextFieldDelegate +extension EditProfileViewController: UITextFieldDelegate { + + /// Return 눌렀을 때 키보드 내리기 + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + textField.resignFirstResponder() + return true + } + /// nicknameTextField 글자수 세기, 제한 + /// 빌드해서 Camera TextField 확인하기 + @objc private func textDidChange(_ notification: Notification) { + if let textField = notification.object as? UITextField { + if let nicknametext = nicknameTextField.text { + + if nicknametext.count > maxLength { + // 6글자 넘어가면 자동으로 키보드 내려감 + // textField.resignFirstResponder() + let countNum = nicknameTextField.text?.count ?? 0 + // countTextLabel.text = "\(countNum)/6" + } + // 초과되는 텍스트 제거 + if nicknametext.count >= maxLength { + let index = nicknametext.index(nicknametext.startIndex, offsetBy: maxLength) + let newString = nicknametext[nicknametext.startIndex.. Date: Mon, 17 Oct 2022 14:45:08 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[ADD]=20-=20#140=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=ED=95=84=20=EB=B3=80=EA=B2=BD=20Button=20=ED=99=9C=EC=84=B1?= =?UTF-8?q?=ED=99=94=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EditProfileViewController.swift | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/Fillin-iOS/Fillin-iOS/Sources/ViewControllers/MyPageViewController/EditProfileViewController.swift b/Fillin-iOS/Fillin-iOS/Sources/ViewControllers/MyPageViewController/EditProfileViewController.swift index 58a07e2..813f35d 100644 --- a/Fillin-iOS/Fillin-iOS/Sources/ViewControllers/MyPageViewController/EditProfileViewController.swift +++ b/Fillin-iOS/Fillin-iOS/Sources/ViewControllers/MyPageViewController/EditProfileViewController.swift @@ -209,9 +209,9 @@ extension EditProfileViewController { func attributePlaceholder() { nicknameTextField.attributedPlaceholder = NSAttributedString(string : "닉네임을 입력해주세요. (10자 이하)", attributes : [NSAttributedString.Key.foregroundColor: UIColor.grey4, - NSAttributedString.Key.font : UIFont.body1]) + NSAttributedString.Key.font : UIFont.body1]) cameraTextField.attributedPlaceholder = NSAttributedString(string : "사용 중인 카메라 이름을 입력해주세요.", - attributes : [NSAttributedString.Key.foregroundColor: UIColor.grey4, + attributes : [NSAttributedString.Key.foregroundColor: UIColor.grey4, NSAttributedString.Key.font :UIFont.body1]) } @objc func profileChangeButtonClicked() { @@ -220,6 +220,10 @@ extension EditProfileViewController { @objc func sendButtonClicked() { print("프로필 변경하기") } + /// 빈 공간 터치하면 키보드 내려가게 + override func touchesBegan(_ touches: Set, with event: UIEvent?) { + self.view.endEditing(true) + } } // MARK: - UITextFieldDelegate @@ -231,7 +235,6 @@ extension EditProfileViewController: UITextFieldDelegate { return true } /// nicknameTextField 글자수 세기, 제한 - /// 빌드해서 Camera TextField 확인하기 @objc private func textDidChange(_ notification: Notification) { if let textField = notification.object as? UITextField { if let nicknametext = nicknameTextField.text { @@ -253,19 +256,22 @@ extension EditProfileViewController: UITextFieldDelegate { clearButton.setImage(Asset.btnClear.image, for: .normal) } } + if nicknametext.isEmpty == true { + self.changeProfileButton.setupButton(title: "프로필 변경", + color: .grey4, + font: .headline, + backgroundColor: .textviewGrey, + state: .normal, + radius: 0) + } else { + self.changeProfileButton.setupButton(title: "프로필 변경", + color: .fillinBlack, + font: .headline, + backgroundColor: .fillinRed, + state: .normal, + radius: 0) + } } -// self.changeProfileButton.setupButton(title: "프로필 변경", -// color: .fillinBlack, -// font: .headline, -// backgroundColor: .fillinRed, -// state: .normal, -// radius: 0) - self.changeProfileButton.setupButton(title: "프로필 변경", - color: .grey4, - font: .headline, - backgroundColor: .textviewGrey, - state: .normal, - radius: 0) } } }