diff --git a/README.md b/README.md index 2d3aaf6..edc8b5f 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,17 @@ # swift-signup -스위프트 회원가입 프로젝트 +## Step-1 회원가입 첫 번째 화면 만들기 + +

+step1 +

+ +- 스토리보드로 화면 작성 + - TextField의 KeyType, Button의 Enable 초기 설정 등 +- TextField의 Delegate 분리 + - 타입을 만들어 Delegate를 구현해서, ViewController가 Delegate를 직접 채택하지 않도록 함 +- ID는 5~20자의 영문 소문자, 숫자와 특수기호(-, _)만 사용 가능 +- Password는 8~16자의 영문 대/소문자, 숫자, 특수문자를 조합해야 함 +- 이름은 꼭 입력해야 한다. +- 모든 항목이 조건에 부합하면 버튼이 활성화된다. + + diff --git a/swift-signup/swift-signup.xcodeproj/project.pbxproj b/swift-signup/swift-signup.xcodeproj/project.pbxproj index 4c009c8..f6a3562 100644 --- a/swift-signup/swift-signup.xcodeproj/project.pbxproj +++ b/swift-signup/swift-signup.xcodeproj/project.pbxproj @@ -15,12 +15,14 @@ CE366BE02611BA8E00506D3F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CE366BDE2611BA8E00506D3F /* LaunchScreen.storyboard */; }; CE366BEB2611BA8E00506D3F /* swift_signupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE366BEA2611BA8E00506D3F /* swift_signupTests.swift */; }; CE366BF62611BA8E00506D3F /* swift_signupUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE366BF52611BA8E00506D3F /* swift_signupUITests.swift */; }; - CE366C2C2611F9CF00506D3F /* IdTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE366C2B2611F9CF00506D3F /* IdTextField.swift */; }; - CE366C3426123A5A00506D3F /* PasswordTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE366C3326123A5A00506D3F /* PasswordTextField.swift */; }; - CE366C3F2612470800506D3F /* CustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE366C3E2612470800506D3F /* CustomTextField.swift */; }; - CE366C5A2613495D00506D3F /* PasswordConfirmTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE366C592613495D00506D3F /* PasswordConfirmTextField.swift */; }; - CE366C622613EEDC00506D3F /* NameTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE366C612613EEDC00506D3F /* NameTextField.swift */; }; - CE366C6A261401E900506D3F /* ButtonManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE366C69261401E900506D3F /* ButtonManager.swift */; }; + CEA3A5422619B47C007AA664 /* CustomTextFieldDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA3A5412619B47C007AA664 /* CustomTextFieldDelegate.swift */; }; + CEA3A547261B26DB007AA664 /* Validater.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA3A546261B26DB007AA664 /* Validater.swift */; }; + CEA3A54C261B2EE2007AA664 /* IdValidater.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA3A54B261B2EE2007AA664 /* IdValidater.swift */; }; + CEA3A551261B2F0D007AA664 /* PasswordValidater.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA3A550261B2F0D007AA664 /* PasswordValidater.swift */; }; + CEA3A556261B30E2007AA664 /* PasswordConfirmValidater.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA3A555261B30E2007AA664 /* PasswordConfirmValidater.swift */; }; + CEA3A55B261B32DD007AA664 /* NameValidater.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA3A55A261B32DD007AA664 /* NameValidater.swift */; }; + CEA3A560261B4E9A007AA664 /* Validable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEA3A55F261B4E9A007AA664 /* Validable.swift */; }; + CEB52F762616BEEC002C1650 /* PersonalInformationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEB52F752616BEEC002C1650 /* PersonalInformationViewController.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -55,12 +57,14 @@ CE366BF12611BA8E00506D3F /* swift-signupUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-signupUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; CE366BF52611BA8E00506D3F /* swift_signupUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = swift_signupUITests.swift; sourceTree = ""; }; CE366BF72611BA8E00506D3F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CE366C2B2611F9CF00506D3F /* IdTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdTextField.swift; sourceTree = ""; }; - CE366C3326123A5A00506D3F /* PasswordTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordTextField.swift; sourceTree = ""; }; - CE366C3E2612470800506D3F /* CustomTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTextField.swift; sourceTree = ""; }; - CE366C592613495D00506D3F /* PasswordConfirmTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordConfirmTextField.swift; sourceTree = ""; }; - CE366C612613EEDC00506D3F /* NameTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NameTextField.swift; sourceTree = ""; }; - CE366C69261401E900506D3F /* ButtonManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonManager.swift; sourceTree = ""; }; + CEA3A5412619B47C007AA664 /* CustomTextFieldDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTextFieldDelegate.swift; sourceTree = ""; }; + CEA3A546261B26DB007AA664 /* Validater.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Validater.swift; sourceTree = ""; }; + CEA3A54B261B2EE2007AA664 /* IdValidater.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdValidater.swift; sourceTree = ""; }; + CEA3A550261B2F0D007AA664 /* PasswordValidater.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordValidater.swift; sourceTree = ""; }; + CEA3A555261B30E2007AA664 /* PasswordConfirmValidater.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordConfirmValidater.swift; sourceTree = ""; }; + CEA3A55A261B32DD007AA664 /* NameValidater.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NameValidater.swift; sourceTree = ""; }; + CEA3A55F261B4E9A007AA664 /* Validable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Validable.swift; sourceTree = ""; }; + CEB52F752616BEEC002C1650 /* PersonalInformationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersonalInformationViewController.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -111,15 +115,11 @@ CE366BD22611BA8D00506D3F /* swift-signup */ = { isa = PBXGroup; children = ( + CEB52F7F2616BF5E002C1650 /* Model */, + CEB52F7E2616BF05002C1650 /* TextFieldDelegate */, + CEB52F7D2616BEF7002C1650 /* Controller */, CE366BD32611BA8D00506D3F /* AppDelegate.swift */, CE366BD52611BA8D00506D3F /* SceneDelegate.swift */, - CE366C69261401E900506D3F /* ButtonManager.swift */, - CE366BD72611BA8D00506D3F /* ViewController.swift */, - CE366C3E2612470800506D3F /* CustomTextField.swift */, - CE366C2B2611F9CF00506D3F /* IdTextField.swift */, - CE366C3326123A5A00506D3F /* PasswordTextField.swift */, - CE366C592613495D00506D3F /* PasswordConfirmTextField.swift */, - CE366C612613EEDC00506D3F /* NameTextField.swift */, CE366BD92611BA8D00506D3F /* Main.storyboard */, CE366BDC2611BA8E00506D3F /* Assets.xcassets */, CE366BDE2611BA8E00506D3F /* LaunchScreen.storyboard */, @@ -146,6 +146,36 @@ path = "swift-signupUITests"; sourceTree = ""; }; + CEB52F7D2616BEF7002C1650 /* Controller */ = { + isa = PBXGroup; + children = ( + CE366BD72611BA8D00506D3F /* ViewController.swift */, + CEB52F752616BEEC002C1650 /* PersonalInformationViewController.swift */, + ); + path = Controller; + sourceTree = ""; + }; + CEB52F7E2616BF05002C1650 /* TextFieldDelegate */ = { + isa = PBXGroup; + children = ( + CEA3A5412619B47C007AA664 /* CustomTextFieldDelegate.swift */, + ); + path = TextFieldDelegate; + sourceTree = ""; + }; + CEB52F7F2616BF5E002C1650 /* Model */ = { + isa = PBXGroup; + children = ( + CEA3A546261B26DB007AA664 /* Validater.swift */, + CEA3A54B261B2EE2007AA664 /* IdValidater.swift */, + CEA3A550261B2F0D007AA664 /* PasswordValidater.swift */, + CEA3A555261B30E2007AA664 /* PasswordConfirmValidater.swift */, + CEA3A55A261B32DD007AA664 /* NameValidater.swift */, + CEA3A55F261B4E9A007AA664 /* Validable.swift */, + ); + path = Model; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -276,15 +306,17 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - CE366C622613EEDC00506D3F /* NameTextField.swift in Sources */, - CE366C3426123A5A00506D3F /* PasswordTextField.swift in Sources */, + CEA3A55B261B32DD007AA664 /* NameValidater.swift in Sources */, CE366BD82611BA8D00506D3F /* ViewController.swift in Sources */, - CE366C3F2612470800506D3F /* CustomTextField.swift in Sources */, + CEB52F762616BEEC002C1650 /* PersonalInformationViewController.swift in Sources */, CE366BD42611BA8D00506D3F /* AppDelegate.swift in Sources */, - CE366C5A2613495D00506D3F /* PasswordConfirmTextField.swift in Sources */, - CE366C2C2611F9CF00506D3F /* IdTextField.swift in Sources */, + CEA3A54C261B2EE2007AA664 /* IdValidater.swift in Sources */, + CEA3A551261B2F0D007AA664 /* PasswordValidater.swift in Sources */, + CEA3A556261B30E2007AA664 /* PasswordConfirmValidater.swift in Sources */, + CEA3A5422619B47C007AA664 /* CustomTextFieldDelegate.swift in Sources */, CE366BD62611BA8D00506D3F /* SceneDelegate.swift in Sources */, - CE366C6A261401E900506D3F /* ButtonManager.swift in Sources */, + CEA3A547261B26DB007AA664 /* Validater.swift in Sources */, + CEA3A560261B4E9A007AA664 /* Validable.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/swift-signup/swift-signup.xcodeproj/project.xcworkspace/xcuserdata/user.xcuserdatad/UserInterfaceState.xcuserstate b/swift-signup/swift-signup.xcodeproj/project.xcworkspace/xcuserdata/user.xcuserdatad/UserInterfaceState.xcuserstate index 36f18ff..7d86e58 100644 Binary files a/swift-signup/swift-signup.xcodeproj/project.xcworkspace/xcuserdata/user.xcuserdatad/UserInterfaceState.xcuserstate and b/swift-signup/swift-signup.xcodeproj/project.xcworkspace/xcuserdata/user.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/swift-signup/swift-signup/Base.lproj/Main.storyboard b/swift-signup/swift-signup/Base.lproj/Main.storyboard index 4dc9534..6e21850 100644 --- a/swift-signup/swift-signup/Base.lproj/Main.storyboard +++ b/swift-signup/swift-signup/Base.lproj/Main.storyboard @@ -1,5 +1,5 @@ - + @@ -26,37 +26,49 @@ - + - + + + + - + - + + + + - + - + + + + - + - + + + + -