- Made the forget password UI.

- Made login view.
- Continue the flow from onboarding.
- added the flow from login-> create account and forget password.
This commit is contained in:
Bilal
2024-05-03 20:27:54 +05:30
parent 10a3e9d05d
commit 32f9ddaa7d
20 changed files with 906 additions and 83 deletions

View File

@@ -11,7 +11,7 @@ This Library consist of all Reusable Modules For iOS with language **SWIFT**.
</div>
[![Platform](https://img.shields.io/badge/Swift-Compatible-52EC18)](https://github.com/WdiplCodeRepo/IOS/tree/main/Authentication)
[![Platform](https://img.shields.io/badge/Swift-Compatible-52EC18)](https://developer.apple.com/swift/)
## Usage

View File

@@ -74,6 +74,14 @@
9C56E8462BDBEE6400E4CA14 /* EmailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C56E8452BDBEE6400E4CA14 /* EmailVC.swift */; };
9C56E8482BDBEFAB00E4CA14 /* AssetColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C56E8472BDBEFAB00E4CA14 /* AssetColor.swift */; };
9C56E84B2BDBF03F00E4CA14 /* AuthenticationSB.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9C56E84A2BDBF03F00E4CA14 /* AuthenticationSB.storyboard */; };
9CBCB29B2BE4D614007D7934 /* LoginVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CBCB29A2BE4D614007D7934 /* LoginVC.swift */; };
9CBCB29D2BE4D6BB007D7934 /* LoginVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CBCB29C2BE4D6BB007D7934 /* LoginVM.swift */; };
9CBCB29F2BE4E13A007D7934 /* ValidatorClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CBCB29E2BE4E13A007D7934 /* ValidatorClass.swift */; };
9CBCB2A12BE4E50A007D7934 /* TextFieldPassword.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CBCB2A02BE4E50A007D7934 /* TextFieldPassword.swift */; };
9CBCB2A32BE50C95007D7934 /* ResetPassUserNameVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CBCB2A22BE50C95007D7934 /* ResetPassUserNameVC.swift */; };
9CBCB2A52BE50D49007D7934 /* NewPasswordVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CBCB2A42BE50D49007D7934 /* NewPasswordVC.swift */; };
9CBCB2A82BE5105A007D7934 /* Home.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9CBCB2A72BE5105A007D7934 /* Home.storyboard */; };
9CBCB2AA2BE51A52007D7934 /* HomeVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CBCB2A92BE51A52007D7934 /* HomeVC.swift */; };
9CDC343C2BDBBC6B00093089 /* SelectAgeVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDC343B2BDBBC6B00093089 /* SelectAgeVC.swift */; };
9CDCE1452BDB9B9A003FEF11 /* OnBoardMainSound.m4a in Resources */ = {isa = PBXBuildFile; fileRef = 9CDCE1442BDB9B9A003FEF11 /* OnBoardMainSound.m4a */; };
/* End PBXBuildFile section */
@@ -170,6 +178,14 @@
9C56E8452BDBEE6400E4CA14 /* EmailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmailVC.swift; sourceTree = "<group>"; };
9C56E8472BDBEFAB00E4CA14 /* AssetColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetColor.swift; sourceTree = "<group>"; };
9C56E8492BDBF03F00E4CA14 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/AuthenticationSB.storyboard; sourceTree = "<group>"; };
9CBCB29A2BE4D614007D7934 /* LoginVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginVC.swift; sourceTree = "<group>"; };
9CBCB29C2BE4D6BB007D7934 /* LoginVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginVM.swift; sourceTree = "<group>"; };
9CBCB29E2BE4E13A007D7934 /* ValidatorClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidatorClass.swift; sourceTree = "<group>"; };
9CBCB2A02BE4E50A007D7934 /* TextFieldPassword.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFieldPassword.swift; sourceTree = "<group>"; };
9CBCB2A22BE50C95007D7934 /* ResetPassUserNameVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResetPassUserNameVC.swift; sourceTree = "<group>"; };
9CBCB2A42BE50D49007D7934 /* NewPasswordVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewPasswordVC.swift; sourceTree = "<group>"; };
9CBCB2A72BE5105A007D7934 /* Home.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Home.storyboard; sourceTree = "<group>"; };
9CBCB2A92BE51A52007D7934 /* HomeVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeVC.swift; sourceTree = "<group>"; };
9CDC343B2BDBBC6B00093089 /* SelectAgeVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectAgeVC.swift; sourceTree = "<group>"; };
9CDCE1412BDB94BA003FEF11 /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/Main.strings; sourceTree = "<group>"; };
9CDCE1422BDB94BD003FEF11 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Main.strings; sourceTree = "<group>"; };
@@ -226,6 +242,7 @@
children = (
5202AB002BDFA7900043B7BD /* EmailValidation.swift */,
52D774EE2BDFC50D001D87DE /* StringValidations.swift */,
9CBCB29E2BE4E13A007D7934 /* ValidatorClass.swift */,
);
path = Validations;
sourceTree = "<group>";
@@ -255,14 +272,15 @@
523ED25C2BDA2BC700CFED02 /* WOKA */ = {
isa = PBXGroup;
children = (
9CBCB2A62BE5104F007D7934 /* Home */,
52C6E01F2BE3ADD800E22D59 /* Default Enum */,
9C56E83E2BDBE4FB00E4CA14 /* Authentication */,
523ED28E2BDA372C00CFED02 /* OnBoarding Module */,
9C27E1612BDB6F0F00EC1DA9 /* Main */,
9C27E15E2BDB6E4F00EC1DA9 /* Localized Module */,
52C8B0552BDA57CE003B51D0 /* Constants K */,
52C8B0512BDA4B51003B51D0 /* Helpers */,
523ED2932BDA3D0100CFED02 /* Assets */,
523ED28E2BDA372C00CFED02 /* OnBoarding Module */,
523ED2682BDA2BC900CFED02 /* LaunchScreen.storyboard */,
523ED26B2BDA2BC900CFED02 /* Info.plist */,
);
@@ -392,6 +410,7 @@
5202AAFD2BDF90590043B7BD /* TextFieldImage.swift */,
52663FF42BDFAB830001D8CE /* TextFieldErrorView.swift */,
52663FFA2BDFB1700001D8CE /* TextFieldShadow.swift */,
9CBCB2A02BE4E50A007D7934 /* TextFieldPassword.swift */,
);
path = "UIElements Helper";
sourceTree = "<group>";
@@ -484,6 +503,7 @@
5272FCE42BDFDC8C000ECB1D /* UserDetailsRegisterVM.swift */,
52CA28FB2BE11A0400708B49 /* UserIntrestVM.swift */,
52C6E0282BE3B52500E22D59 /* SelectAvatarVM.swift */,
9CBCB29C2BE4D6BB007D7934 /* LoginVM.swift */,
);
path = ViewModel;
sourceTree = "<group>";
@@ -496,10 +516,22 @@
5272FCE22BDFDB05000ECB1D /* UserDetailsRegisterVC.swift */,
52CA28F92BE119F500708B49 /* UserIntrestVC.swift */,
52C6E0222BE3B3E300E22D59 /* SelectAvatarVC.swift */,
9CBCB29A2BE4D614007D7934 /* LoginVC.swift */,
9CBCB2A22BE50C95007D7934 /* ResetPassUserNameVC.swift */,
9CBCB2A42BE50D49007D7934 /* NewPasswordVC.swift */,
);
path = Controller;
sourceTree = "<group>";
};
9CBCB2A62BE5104F007D7934 /* Home */ = {
isa = PBXGroup;
children = (
9CBCB2A72BE5105A007D7934 /* Home.storyboard */,
9CBCB2A92BE51A52007D7934 /* HomeVC.swift */,
);
path = Home;
sourceTree = "<group>";
};
9CDCE1432BDB9B64003FEF11 /* Sounds */ = {
isa = PBXGroup;
children = (
@@ -623,6 +655,7 @@
9C27E1732BDB86B600EC1DA9 /* OnBoardCell.xib in Resources */,
9CDCE1452BDB9B9A003FEF11 /* OnBoardMainSound.m4a in Resources */,
9C56E84B2BDBF03F00E4CA14 /* AuthenticationSB.storyboard in Resources */,
9CBCB2A82BE5105A007D7934 /* Home.storyboard in Resources */,
52C8B0632BDA6993003B51D0 /* Localizable.strings in Resources */,
9C56E8382BDBC3F000E4CA14 /* Exo2-ExtraBold.ttf in Resources */,
9C56E8372BDBC3F000E4CA14 /* Exo2-Thin.ttf in Resources */,
@@ -726,16 +759,23 @@
52C6E01B2BE383C000E22D59 /* YourIntrestCell.swift in Sources */,
523ED25E2BDA2BC700CFED02 /* AppDelegate.swift in Sources */,
52D774ED2BDFC13F001D87DE /* OTPVM.swift in Sources */,
9CBCB2A32BE50C95007D7934 /* ResetPassUserNameVC.swift in Sources */,
9CBCB2A52BE50D49007D7934 /* NewPasswordVC.swift in Sources */,
9CBCB29F2BE4E13A007D7934 /* ValidatorClass.swift in Sources */,
9CBCB29B2BE4D614007D7934 /* LoginVC.swift in Sources */,
9C56E83B2BDBC6E600E4CA14 /* SelectAgeVM.swift in Sources */,
52CA28FA2BE119F500708B49 /* UserIntrestVC.swift in Sources */,
9C27E16B2BDB774D00EC1DA9 /* CarouselData.swift in Sources */,
523ED2602BDA2BC700CFED02 /* SceneDelegate.swift in Sources */,
9CBCB2AA2BE51A52007D7934 /* HomeVC.swift in Sources */,
52D774E92BDFBDA4001D87DE /* AuthenticationStringConstant.swift in Sources */,
9C27E1672BDB706700EC1DA9 /* StoryBoard.swift in Sources */,
52C8B0692BDA6E1E003B51D0 /* LocalizedEnum.swift in Sources */,
52C6E01E2BE3847F00E22D59 /* BorderView.swift in Sources */,
52C8B0742BDA7626003B51D0 /* OnBoardVC.swift in Sources */,
9CBCB2A12BE4E50A007D7934 /* TextFieldPassword.swift in Sources */,
9C56E8482BDBEFAB00E4CA14 /* AssetColor.swift in Sources */,
9CBCB29D2BE4D6BB007D7934 /* LoginVM.swift in Sources */,
5272FCE52BDFDC8C000ECB1D /* UserDetailsRegisterVM.swift in Sources */,
9C27E1652BDB6FBC00EC1DA9 /* StoryBoardID.swift in Sources */,
9C27E1722BDB86B600EC1DA9 /* OnBoardCell.swift in Sources */,

View File

@@ -13,6 +13,9 @@
<array key="Exo2-Bold.ttf">
<string>Exo2-Bold</string>
</array>
<array key="Exo2-ExtraBold.ttf">
<string>Exo2-ExtraBold</string>
</array>
<array key="Exo2-Medium.ttf">
<string>Exo2-Medium</string>
</array>
@@ -748,6 +751,7 @@ Sent to Your Parents Email</string>
</state>
<connections>
<action selector="nextBtnTapped:" destination="Yeg-Vy-0ZA" eventType="touchUpInside" id="8WI-0P-0bu"/>
<action selector="nextBtnTapped:" destination="0J9-HF-tOK" eventType="touchUpInside" id="nur-Bo-12q"/>
</connections>
</button>
</subviews>
@@ -770,37 +774,568 @@ Sent to Your Parents Email</string>
<navigationItem key="navigationItem" id="IZ3-42-UXo"/>
<connections>
<outlet property="collectionView" destination="1uh-3v-vfA" id="RGK-16-LPn"/>
<outlet property="nextBtn" destination="1hT-hu-cP2" id="mxz-X4-NVu"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="pn4-St-f6P" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="2324.6376811594205" y="-27.455357142857142"/>
</scene>
<!--LoginVC-->
<scene sceneID="Vqq-Tk-AoX">
<objects>
<viewController storyboardIdentifier="LoginVC" id="vuc-DA-J2M" customClass="LoginVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="IaD-iX-nYV">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="BackgroundSplash" translatesAutoresizingMaskIntoConstraints="NO" id="Cj9-TI-6RF">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
</imageView>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="WokaLogo" translatesAutoresizingMaskIntoConstraints="NO" id="dYE-pF-NG5">
<rect key="frame" x="137" y="50" width="140" height="52.5"/>
<constraints>
<constraint firstAttribute="width" constant="140" id="E5x-0b-APB"/>
<constraint firstAttribute="width" secondItem="dYE-pF-NG5" secondAttribute="height" multiplier="8:3" id="FBp-5c-Tze"/>
</constraints>
</imageView>
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="M5Q-DD-j9X">
<rect key="frame" x="0.0" y="107.5" width="414" height="754.5"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="aNK-S5-pik">
<rect key="frame" x="0.0" y="0.0" width="414" height="763.5"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Y9q-mR-AlW">
<rect key="frame" x="20" y="0.0" width="374" height="60"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="70" translatesAutoresizingMaskIntoConstraints="NO" id="Krs-Zs-R6t">
<rect key="frame" x="20" y="60" width="374" height="447.5"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Login to WOKA" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1T4-5K-cXT" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="374" height="32.5"/>
<fontDescription key="fontDescription" name="Exo2-ExtraBold" family="Exo 2" pointSize="27"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="30" translatesAutoresizingMaskIntoConstraints="NO" id="EhK-1C-Xey">
<rect key="frame" x="0.0" y="102.5" width="374" height="345"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="krT-0d-tCQ">
<rect key="frame" x="0.0" y="0.0" width="374" height="99.5"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="USERNAME" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3Xc-wy-9mu" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="374" height="19.5"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter your username" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="68c-1b-KSI" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="34.5" width="374" height="50"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<color key="tintColor" name="TextDarkBlue"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="QFZ-cU-qXh"/>
</constraints>
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" enablesReturnKeyAutomatically="YES" textContentType="username"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="paddingLeftCustom">
<real key="value" value="25"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="paddingRightCustom">
<real key="value" value="25"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</textField>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JQm-yr-A2M">
<rect key="frame" x="0.0" y="99.5" width="374" height="0.0"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="fVp-fO-1fH">
<rect key="frame" x="0.0" y="129.5" width="374" height="135.5"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="ebQ-va-83Q">
<rect key="frame" x="0.0" y="0.0" width="374" height="99.5"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="PASSWORD" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BcT-5f-ded" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="374" height="19.5"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter your password" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="iJE-dm-qal" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="34.5" width="374" height="50"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<color key="tintColor" name="TextDarkBlue"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="iFK-gL-o8o"/>
</constraints>
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" spellCheckingType="no" enablesReturnKeyAutomatically="YES" secureTextEntry="YES" smartQuotesType="no" textContentType="password"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="paddingLeftCustom">
<real key="value" value="25"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="paddingRightCustom">
<real key="value" value="25"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</textField>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2YT-HL-ug7">
<rect key="frame" x="0.0" y="99.5" width="374" height="0.0"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</stackView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="yp6-2q-OZC">
<rect key="frame" x="0.0" y="104.5" width="374" height="31"/>
<color key="tintColor" name="TextDarkBlue"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain" title="Forget Password?">
<fontDescription key="titleFontDescription" name="Exo2-Regular" family="Exo 2" pointSize="14"/>
</buttonConfiguration>
<connections>
<action selector="forgotPasswordBtnTapped:" destination="vuc-DA-J2M" eventType="touchUpInside" id="2dS-KN-qUj"/>
</connections>
</button>
</subviews>
</stackView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="OFt-kx-VfD" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="295" width="374" height="50"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="Tle-PZ-1B4"/>
</constraints>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="LOGIN">
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</state>
<connections>
<action selector="loginBtnTapped:" destination="vuc-DA-J2M" eventType="touchUpInside" id="ZJk-AD-fA1"/>
</connections>
</button>
</subviews>
</stackView>
</subviews>
</stackView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tOZ-1S-7K5">
<rect key="frame" x="20" y="507.5" width="374" height="120"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="Nnb-iQ-OQs">
<rect key="frame" x="20" y="627.5" width="374" height="106"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ly3-jW-G7X">
<rect key="frame" x="0.0" y="0.0" width="374" height="36"/>
<color key="tintColor" name="TextDarkBlue"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain">
<attributedString key="attributedTitle">
<fragment content="Continue as a Guest">
<attributes>
<font key="NSFont" size="18" name="Exo2-Bold"/>
</attributes>
</fragment>
</attributedString>
</buttonConfiguration>
<connections>
<action selector="continueGuestBtnTapped:" destination="vuc-DA-J2M" eventType="touchUpInside" id="50B-ge-oNj"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="TYc-dA-ZOV" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="56" width="374" height="50"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="sfz-a2-WZy"/>
</constraints>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="CREATE YOUR ACCOUNT">
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</state>
<connections>
<action selector="createAccountBtnTapped:" destination="vuc-DA-J2M" eventType="touchUpInside" id="j69-S9-zNt"/>
</connections>
</button>
</subviews>
</stackView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Sb4-yj-JJ2">
<rect key="frame" x="20" y="733.5" width="374" height="30"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="30" id="RxX-pL-7Ux"/>
</constraints>
</view>
</subviews>
<edgeInsets key="layoutMargins" top="0.0" left="20" bottom="0.0" right="20"/>
</stackView>
</subviews>
<constraints>
<constraint firstAttribute="bottom" secondItem="aNK-S5-pik" secondAttribute="bottom" id="Yab-xI-uDs"/>
<constraint firstItem="aNK-S5-pik" firstAttribute="width" secondItem="gMF-YJ-fMn" secondAttribute="width" id="fww-B0-cxA"/>
<constraint firstItem="aNK-S5-pik" firstAttribute="top" secondItem="M5Q-DD-j9X" secondAttribute="top" id="vhU-9a-AHd"/>
<constraint firstItem="aNK-S5-pik" firstAttribute="leading" secondItem="QBx-4m-i11" secondAttribute="leading" id="ysE-q7-TkF"/>
<constraint firstItem="QBx-4m-i11" firstAttribute="trailing" secondItem="aNK-S5-pik" secondAttribute="trailing" id="zog-u4-gIj"/>
</constraints>
<viewLayoutGuide key="contentLayoutGuide" id="gMF-YJ-fMn"/>
<viewLayoutGuide key="frameLayoutGuide" id="QBx-4m-i11"/>
</scrollView>
</subviews>
<viewLayoutGuide key="safeArea" id="Zsp-nJ-qp9"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="M5Q-DD-j9X" firstAttribute="leading" secondItem="Zsp-nJ-qp9" secondAttribute="leading" id="4yA-9T-cp6"/>
<constraint firstItem="dYE-pF-NG5" firstAttribute="centerX" secondItem="Cj9-TI-6RF" secondAttribute="centerX" id="77b-sh-rCd"/>
<constraint firstItem="dYE-pF-NG5" firstAttribute="top" secondItem="IaD-iX-nYV" secondAttribute="top" constant="50" id="Giv-mD-nra"/>
<constraint firstItem="Cj9-TI-6RF" firstAttribute="top" secondItem="IaD-iX-nYV" secondAttribute="top" id="Lby-HC-PDt"/>
<constraint firstItem="M5Q-DD-j9X" firstAttribute="trailing" secondItem="Zsp-nJ-qp9" secondAttribute="trailing" id="LgS-lp-LLz"/>
<constraint firstItem="M5Q-DD-j9X" firstAttribute="bottom" secondItem="Zsp-nJ-qp9" secondAttribute="bottom" id="Lqk-CU-79j"/>
<constraint firstItem="tOZ-1S-7K5" firstAttribute="height" secondItem="IaD-iX-nYV" secondAttribute="height" multiplier="0.133929" id="aNx-6t-F1y"/>
<constraint firstItem="Y9q-mR-AlW" firstAttribute="height" secondItem="IaD-iX-nYV" secondAttribute="height" multiplier="0.0669643" id="bis-6D-vXV"/>
<constraint firstItem="Zsp-nJ-qp9" firstAttribute="trailing" secondItem="Cj9-TI-6RF" secondAttribute="trailing" id="eJ6-Tf-lTr"/>
<constraint firstAttribute="bottom" secondItem="Cj9-TI-6RF" secondAttribute="bottom" id="gSV-I3-q1H"/>
<constraint firstItem="M5Q-DD-j9X" firstAttribute="top" secondItem="dYE-pF-NG5" secondAttribute="bottom" constant="5" id="rm0-7u-I5r"/>
<constraint firstItem="Cj9-TI-6RF" firstAttribute="leading" secondItem="Zsp-nJ-qp9" secondAttribute="leading" id="sEZ-hv-yKh"/>
</constraints>
</view>
<navigationItem key="navigationItem" id="0VJ-00-N9Z"/>
<connections>
<outlet property="createAccountBtn" destination="TYc-dA-ZOV" id="gJn-Uv-ulJ"/>
<outlet property="loginBtn" destination="OFt-kx-VfD" id="IYL-gk-Q1B"/>
<outlet property="passwordTF" destination="iJE-dm-qal" id="8KX-Vs-K9a"/>
<outlet property="userNameTF" destination="68c-1b-KSI" id="L8R-yu-4Um"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Mdc-Fp-9OO" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="3098.5507246376815" y="-27.455357142857142"/>
</scene>
<!--Reset Pass User NameVC-->
<scene sceneID="h7R-p4-2q6">
<objects>
<viewController storyboardIdentifier="ResetPassUserNameVC" id="zmU-4d-wMC" customClass="ResetPassUserNameVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="Sgi-hQ-Gsy">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="BackgroundSplash" translatesAutoresizingMaskIntoConstraints="NO" id="aMz-cV-9jf">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
</imageView>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="WokaLogo" translatesAutoresizingMaskIntoConstraints="NO" id="Uo0-KI-88t">
<rect key="frame" x="137" y="50" width="140" height="52.5"/>
<constraints>
<constraint firstAttribute="width" constant="140" id="Ea4-eb-ysK"/>
<constraint firstAttribute="width" secondItem="Uo0-KI-88t" secondAttribute="height" multiplier="8:3" id="TXC-lz-9Jd"/>
</constraints>
</imageView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="70" translatesAutoresizingMaskIntoConstraints="NO" id="Pjf-i3-BcY">
<rect key="frame" x="20" y="172.5" width="374" height="203.5"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Forgot your Password?" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="i7M-Ob-pCE" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="10" y="0.0" width="354" height="34"/>
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="28"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="Jlq-Ct-Mrz">
<rect key="frame" x="10" y="104" width="354" height="99.5"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="PLEASE GIVE US YOUR USERNAME" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fCB-jL-yE4">
<rect key="frame" x="0.0" y="0.0" width="354" height="19.5"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter your username" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="wy2-0C-rxG" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="34.5" width="354" height="50"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<color key="tintColor" name="TextDarkBlue"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="YyN-bh-K2y"/>
</constraints>
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" enablesReturnKeyAutomatically="YES" textContentType="username"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="paddingLeftCustom">
<real key="value" value="25"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="paddingRightCustom">
<real key="value" value="25"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</textField>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0ps-Ku-87z">
<rect key="frame" x="0.0" y="99.5" width="354" height="0.0"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</stackView>
</subviews>
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="35" translatesAutoresizingMaskIntoConstraints="NO" id="NPA-IJ-SA5">
<rect key="frame" x="30" y="740" width="354" height="102"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="We will send a reset code to their email" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uv4-iY-Z87" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="354" height="17"/>
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="14"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="JJ0-wA-EP6" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="52" width="354" height="50"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="I7D-T4-sU1"/>
</constraints>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="Next">
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</state>
<connections>
<action selector="nextBtnTapped:" destination="zmU-4d-wMC" eventType="touchUpInside" id="cqW-Oq-dSf"/>
</connections>
</button>
</subviews>
</stackView>
</subviews>
<viewLayoutGuide key="safeArea" id="4Mi-am-PaN"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="NPA-IJ-SA5" firstAttribute="leading" secondItem="4Mi-am-PaN" secondAttribute="leading" constant="30" id="267-Lx-b3h"/>
<constraint firstItem="Pjf-i3-BcY" firstAttribute="leading" secondItem="Sgi-hQ-Gsy" secondAttribute="leading" constant="20" id="8II-uO-ceT"/>
<constraint firstItem="4Mi-am-PaN" firstAttribute="bottom" secondItem="NPA-IJ-SA5" secondAttribute="bottom" constant="20" id="DQ5-nN-Wx9"/>
<constraint firstAttribute="bottom" secondItem="aMz-cV-9jf" secondAttribute="bottom" id="DbW-FE-AVi"/>
<constraint firstItem="Uo0-KI-88t" firstAttribute="top" secondItem="Sgi-hQ-Gsy" secondAttribute="top" constant="50" id="Fg4-I1-ech"/>
<constraint firstItem="Uo0-KI-88t" firstAttribute="centerX" secondItem="aMz-cV-9jf" secondAttribute="centerX" id="RA9-fg-PGi"/>
<constraint firstItem="4Mi-am-PaN" firstAttribute="trailing" secondItem="aMz-cV-9jf" secondAttribute="trailing" id="bJs-tK-NGq"/>
<constraint firstItem="aMz-cV-9jf" firstAttribute="leading" secondItem="4Mi-am-PaN" secondAttribute="leading" id="bgL-dp-5y5"/>
<constraint firstItem="Pjf-i3-BcY" firstAttribute="top" secondItem="Uo0-KI-88t" secondAttribute="bottom" constant="70" id="c06-a0-QcI"/>
<constraint firstItem="aMz-cV-9jf" firstAttribute="top" secondItem="Sgi-hQ-Gsy" secondAttribute="top" id="cvI-QK-Nqi"/>
<constraint firstItem="4Mi-am-PaN" firstAttribute="trailing" secondItem="Pjf-i3-BcY" secondAttribute="trailing" constant="20" id="mgQ-lh-7DR"/>
<constraint firstItem="4Mi-am-PaN" firstAttribute="trailing" secondItem="NPA-IJ-SA5" secondAttribute="trailing" constant="30" id="tUr-oQ-Mes"/>
</constraints>
</view>
<navigationItem key="navigationItem" id="975-te-jRq"/>
<connections>
<outlet property="nextBtn" destination="JJ0-wA-EP6" id="SN3-SU-mKC"/>
<outlet property="usernameTF" destination="wy2-0C-rxG" id="crD-a5-z94"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="wVm-3F-iVK" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-697" y="710"/>
</scene>
<!--New PasswordVC-->
<scene sceneID="abb-yD-DLq">
<objects>
<viewController storyboardIdentifier="NewPasswordVC" id="1Pn-iP-PaH" customClass="NewPasswordVC" customModule="WOKA" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="rCr-gA-4WT">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="BackgroundSplash" translatesAutoresizingMaskIntoConstraints="NO" id="GmS-tq-ip2">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
</imageView>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="WokaLogo" translatesAutoresizingMaskIntoConstraints="NO" id="hZr-H0-7JS">
<rect key="frame" x="137" y="50" width="140" height="52.5"/>
<constraints>
<constraint firstAttribute="width" secondItem="hZr-H0-7JS" secondAttribute="height" multiplier="8:3" id="Qc1-Qm-zOF"/>
<constraint firstAttribute="width" constant="140" id="xPX-2T-bLP"/>
</constraints>
</imageView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="70" translatesAutoresizingMaskIntoConstraints="NO" id="ph5-wC-m3B">
<rect key="frame" x="20" y="172.5" width="374" height="341.5"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Great! Select New Password" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QGk-Uc-mER" customClass="LocalisedElementsLabel" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="10" y="0.0" width="354" height="32.5"/>
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="27"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="40" translatesAutoresizingMaskIntoConstraints="NO" id="qzU-f1-tq1">
<rect key="frame" x="10" y="102.5" width="354" height="239"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="1na-3A-stg">
<rect key="frame" x="0.0" y="0.0" width="354" height="99.5"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="CREATE YOUR PASSWORD" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hYw-Vc-C9h">
<rect key="frame" x="0.0" y="0.0" width="354" height="19.5"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Enter new password" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Skx-Ig-91N" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="34.5" width="354" height="50"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<color key="tintColor" name="TextDarkBlue"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="3wW-lU-Xuy"/>
</constraints>
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" enablesReturnKeyAutomatically="YES" secureTextEntry="YES" textContentType="username"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="paddingLeftCustom">
<real key="value" value="25"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="paddingRightCustom">
<real key="value" value="25"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</textField>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ht0-v3-TeN">
<rect key="frame" x="0.0" y="99.5" width="354" height="0.0"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="Rwa-zV-eg9">
<rect key="frame" x="0.0" y="139.5" width="354" height="99.5"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="CONFIRM YOUR PASSWORD" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6LZ-Ed-gCK">
<rect key="frame" x="0.0" y="0.0" width="354" height="19.5"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="confirm your password" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="JRR-Bk-5UP" customClass="TextFieldShadow" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="34.5" width="354" height="50"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<color key="tintColor" name="TextDarkBlue"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="02n-lw-EMz"/>
</constraints>
<color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" name="Exo2-Regular" family="Exo 2" pointSize="16"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" enablesReturnKeyAutomatically="YES" secureTextEntry="YES" textContentType="username"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="paddingLeftCustom">
<real key="value" value="25"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="paddingRightCustom">
<real key="value" value="25"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</textField>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="B3H-EX-OA7">
<rect key="frame" x="0.0" y="99.5" width="354" height="0.0"/>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="16"/>
<color key="textColor" red="0.035294117649999998" green="0.0" blue="0.36470588240000001" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</stackView>
</subviews>
</stackView>
</subviews>
<edgeInsets key="layoutMargins" top="0.0" left="10" bottom="0.0" right="10"/>
</stackView>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="35" translatesAutoresizingMaskIntoConstraints="NO" id="Ut5-b1-5tm">
<rect key="frame" x="30" y="792" width="354" height="50"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ebp-9w-EVJ" customClass="LocalisedElementsButton" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="354" height="50"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="7q3-na-OZp"/>
</constraints>
<fontDescription key="fontDescription" name="Exo2-Bold" family="Exo 2" pointSize="18"/>
<color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="Next">
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</state>
<connections>
<action selector="nextBtnTapped:" destination="1Pn-iP-PaH" eventType="touchUpInside" id="E7a-9h-e3K"/>
</connections>
</button>
</subviews>
</stackView>
</subviews>
<viewLayoutGuide key="safeArea" id="2M0-gy-xp9"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="2M0-gy-xp9" firstAttribute="trailing" secondItem="ph5-wC-m3B" secondAttribute="trailing" constant="20" id="1b8-2X-1Z5"/>
<constraint firstItem="2M0-gy-xp9" firstAttribute="trailing" secondItem="Ut5-b1-5tm" secondAttribute="trailing" constant="30" id="542-cA-91i"/>
<constraint firstItem="Ut5-b1-5tm" firstAttribute="leading" secondItem="2M0-gy-xp9" secondAttribute="leading" constant="30" id="72w-RI-Im2"/>
<constraint firstItem="hZr-H0-7JS" firstAttribute="centerX" secondItem="GmS-tq-ip2" secondAttribute="centerX" id="AfR-d3-4fd"/>
<constraint firstItem="2M0-gy-xp9" firstAttribute="trailing" secondItem="GmS-tq-ip2" secondAttribute="trailing" id="RiP-3L-h7G"/>
<constraint firstItem="2M0-gy-xp9" firstAttribute="bottom" secondItem="Ut5-b1-5tm" secondAttribute="bottom" constant="20" id="d6m-eA-dnW"/>
<constraint firstItem="GmS-tq-ip2" firstAttribute="leading" secondItem="2M0-gy-xp9" secondAttribute="leading" id="gZq-iB-cKB"/>
<constraint firstItem="ph5-wC-m3B" firstAttribute="leading" secondItem="rCr-gA-4WT" secondAttribute="leading" constant="20" id="gvd-M9-qrc"/>
<constraint firstItem="ph5-wC-m3B" firstAttribute="top" secondItem="hZr-H0-7JS" secondAttribute="bottom" constant="70" id="kfm-vr-8gp"/>
<constraint firstItem="hZr-H0-7JS" firstAttribute="top" secondItem="rCr-gA-4WT" secondAttribute="top" constant="50" id="o48-8A-J8f"/>
<constraint firstItem="GmS-tq-ip2" firstAttribute="top" secondItem="rCr-gA-4WT" secondAttribute="top" id="ong-F3-ab1"/>
<constraint firstAttribute="bottom" secondItem="GmS-tq-ip2" secondAttribute="bottom" id="q8F-dc-EZc"/>
</constraints>
</view>
<navigationItem key="navigationItem" id="Xqd-yw-Ag4"/>
<connections>
<outlet property="confirmPassTF" destination="JRR-Bk-5UP" id="cCQ-al-nHe"/>
<outlet property="enterNewPasswordTF" destination="Skx-Ig-91N" id="fWU-Nf-cho"/>
<outlet property="nextBtn" destination="Ebp-9w-EVJ" id="7jP-pw-l87"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="2VJ-VJ-m6t" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="41" y="710"/>
</scene>
</scenes>
<designables>
<designable name="42K-Uu-lPQ">
<size key="intrinsicContentSize" width="8.5" height="23.5"/>
</designable>
<designable name="4gw-z0-s4a">
<size key="intrinsicContentSize" width="200.5" height="21"/>
<size key="intrinsicContentSize" width="150.5" height="21"/>
</designable>
<designable name="68c-1b-KSI">
<size key="intrinsicContentSize" width="151.5" height="21"/>
</designable>
<designable name="81S-Fa-CiD">
<size key="intrinsicContentSize" width="8.5" height="23.5"/>
</designable>
<designable name="DSB-Ge-wNO">
<size key="intrinsicContentSize" width="169" height="21"/>
<size key="intrinsicContentSize" width="119" height="21"/>
</designable>
<designable name="Hcd-Mm-IxW">
<size key="intrinsicContentSize" width="8.5" height="23.5"/>
</designable>
<designable name="JRR-Bk-5UP">
<size key="intrinsicContentSize" width="168" height="20"/>
</designable>
<designable name="MpT-bm-drv">
<size key="intrinsicContentSize" width="8.5" height="23.5"/>
</designable>
<designable name="Skx-Ig-91N">
<size key="intrinsicContentSize" width="149" height="20"/>
</designable>
<designable name="iJE-dm-qal">
<size key="intrinsicContentSize" width="150.5" height="20"/>
</designable>
<designable name="m50-FZ-yVO">
<size key="intrinsicContentSize" width="201.5" height="21"/>
<size key="intrinsicContentSize" width="151.5" height="21"/>
</designable>
<designable name="tgW-LH-XfR">
<size key="intrinsicContentSize" width="169.5" height="21"/>
<size key="intrinsicContentSize" width="119.5" height="21"/>
</designable>
<designable name="wy2-0C-rxG">
<size key="intrinsicContentSize" width="151.5" height="21"/>
</designable>
</designables>
<resources>

View File

@@ -9,21 +9,64 @@ import UIKit
class LoginVC: UIViewController {
@IBOutlet weak var loginBtn: LocalisedElementsButton!
@IBOutlet weak var createAccountBtn: LocalisedElementsButton!
@IBOutlet weak var userNameTF: TextFieldShadow!
@IBOutlet weak var passwordTF: TextFieldShadow!
@IBOutlet weak var passwordStack: UIStackView!
@IBOutlet weak var passwordEyeBtn: UIButton!
var vm = LoginVM()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
vm.vc = self
vm.initView()
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
@IBAction func loginBtnTapped(_ sender: LocalisedElementsButton) {
}
@IBAction func createAccountBtnTapped(_ sender: LocalisedElementsButton) {
let sb = UIStoryboard(name: K.StoryBoard.main, bundle: nil)
let vc = sb.instantiateViewController(withIdentifier: K.StoryBoardID.OnBoarding.selectAgeVC) as! SelectAgeVC
self.navigationController?.pushViewController(vc, animated: true)
}
@IBAction func continueGuestBtnTapped(_ sender: UIButton) {
}
@IBAction func forgotPasswordBtnTapped(_ sender: UIButton) {
let sb = UIStoryboard(name: K.StoryBoard.authenticationSB, bundle: nil)
let vc = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Authentication.resetPassUserNameVC) as! ResetPassUserNameVC
self.navigationController?.pushViewController(vc, animated: true)
}
}
// MARK: - Textfield Delegate
extension LoginVC : UITextFieldDelegate{
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
switch textField{
case passwordTF:
let currentString = (textField.text ?? "") as NSString
let newString = currentString.replacingCharacters(in: range, with: string)
newString.count == 0 ? (textField.rightView?.isHidden = true) : (textField.rightView?.isHidden = false)
return ValidatorClass.sharedInstanec.limitCharacter(length: 16,textField, shouldChangeCharactersIn: range, replacementString: string)
default:
return true
}
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
switch textField{
case passwordTF:
self.view.endEditing(true)
default:
break
}
return true
}
*/
}

View File

@@ -9,21 +9,57 @@ import UIKit
class NewPasswordVC: UIViewController {
@IBOutlet weak var enterNewPasswordTF: TextFieldShadow!
@IBOutlet weak var confirmPassTF: TextFieldShadow!
@IBOutlet weak var nextBtn: LocalisedElementsButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
initView()
enterNewPasswordTF.enablePasswordToggle()
confirmPassTF.enablePasswordToggle()
enterNewPasswordTF.delegate = self
confirmPassTF.delegate = self
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
func initView(){
enterNewPasswordTF.roundCorner()
confirmPassTF.roundCorner()
let color1 = #colorLiteral(red: 0.144693464, green: 0.1426281333, blue: 0.6686832905, alpha: 1)
let color2 = #colorLiteral(red: 0.6901960784, green: 0.2745098039, blue: 0.7568627451, alpha: 1)
nextBtn.applyGradient(colors: [color1, color2], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0))
}
@IBAction func nextBtnTapped(_ sender: LocalisedElementsButton) {
}
}
// MARK: - Textfield Delegate
extension NewPasswordVC : UITextFieldDelegate{
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
switch textField{
case enterNewPasswordTF,confirmPassTF:
let currentString = (textField.text ?? "") as NSString
let newString = currentString.replacingCharacters(in: range, with: string)
newString.count == 0 ? (textField.rightView?.isHidden = true) : (textField.rightView?.isHidden = false)
return ValidatorClass.sharedInstanec.limitCharacter(length: 16,textField, shouldChangeCharactersIn: range, replacementString: string)
default:
return true
}
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
switch textField{
case enterNewPasswordTF:
self.confirmPassTF.becomeFirstResponder()
case confirmPassTF:
self.view.endEditing(true)
default:
break
}
return true
}
*/
}

View File

@@ -7,6 +7,11 @@
import UIKit
enum NavigateToVC{
case newPass
case registeration
}
class OTPVC : UIViewController{
@IBOutlet weak var wokaLogoTopConstriant: NSLayoutConstraint!
@@ -22,6 +27,7 @@ class OTPVC : UIViewController{
@IBOutlet weak var requestThemLabel: LocalisedElementsLabel!
var vm = OTPVM()
var navigateCheck = NavigateToVC.registeration
override func viewDidLoad() {
super.viewDidLoad()
@@ -42,9 +48,17 @@ class OTPVC : UIViewController{
// MARK: - Button Tap Handler
@IBAction func nextBtnTapped(_ sender: LocalisedElementsButton) {
let sb = UIStoryboard(name: K.StoryBoard.authenticationSB, bundle: nil)
let vc = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Authentication.userDetailsRegisterVC) as! UserDetailsRegisterVC
self.navigationController?.pushViewController(vc, animated: true)
switch self.navigateCheck{
case .newPass:
let sb = UIStoryboard(name: K.StoryBoard.authenticationSB, bundle: nil)
let vc = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Authentication.newPasswordVC) as! NewPasswordVC
self.navigationController?.pushViewController(vc, animated: true)
case .registeration:
let sb = UIStoryboard(name: K.StoryBoard.authenticationSB, bundle: nil)
let vc = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Authentication.userDetailsRegisterVC) as! UserDetailsRegisterVC
self.navigationController?.pushViewController(vc, animated: true)
}
}
}

View File

@@ -9,21 +9,36 @@ import UIKit
class ResetPassUserNameVC: UIViewController {
@IBOutlet weak var usernameTF: TextFieldShadow!
@IBOutlet weak var nextBtn: LocalisedElementsButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
initView()
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
func initView(){
usernameTF.roundCorner()
let color1 = #colorLiteral(red: 0.144693464, green: 0.1426281333, blue: 0.6686832905, alpha: 1)
let color2 = #colorLiteral(red: 0.6901960784, green: 0.2745098039, blue: 0.7568627451, alpha: 1)
nextBtn.applyGradient(colors: [color1, color2], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0))
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(false, animated: animated)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.setNavigationBarHidden(true, animated: animated)
}
@IBAction func nextBtnTapped(_ sender: LocalisedElementsButton) {
let sb = UIStoryboard(name: K.StoryBoard.authenticationSB, bundle: nil)
let vc = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Authentication.oTPVC) as! OTPVC
vc.navigateCheck = .newPass
self.navigationController?.pushViewController(vc, animated: true)
}
*/
}

View File

@@ -10,6 +10,7 @@ import UIKit
class SelectAvatarVC: UIViewController {
@IBOutlet weak var collectionView: UICollectionView!
@IBOutlet weak var nextBtn: LocalisedElementsButton!
var vm = SelectAvatarVM()
@@ -28,6 +29,9 @@ class SelectAvatarVC: UIViewController {
super.viewWillDisappear(animated)
navigationController?.setNavigationBarHidden(true, animated: animated)
}
@IBAction func nextBtnTapped(_ sender: LocalisedElementsButton) {
}
}
// MARK: - CollectionView Delegate

View File

@@ -18,7 +18,7 @@ class SelectAvatarCell: UICollectionViewCell {
}
override func layoutSubviews() {
self.outerView.roundCorner()
self.roundCorner()
}
func setData(){

View File

@@ -11,7 +11,7 @@
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" reuseIdentifier="SelectAvatarCell" id="gTV-IL-0wX" customClass="SelectAvatarCell" customModule="WOKA" customModuleProvider="target">
<collectionViewCell opaque="NO" multipleTouchEnabled="YES" contentMode="scaleToFill" reuseIdentifier="SelectAvatarCell" id="gTV-IL-0wX" customClass="SelectAvatarCell" customModule="WOKA" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="140" height="137"/>
<autoresizingMask key="autoresizingMask"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">

View File

@@ -5,4 +5,36 @@
// Created by Bilal on 03/05/2024.
//
import Foundation
import UIKit
class LoginVM{
weak var vc : LoginVC!
func initView(){
vc.passwordTF.delegate = self.vc
vc.userNameTF.delegate = self.vc
let color1 = #colorLiteral(red: 0.144693464, green: 0.1426281333, blue: 0.6686832905, alpha: 1)
let color2 = #colorLiteral(red: 0.6901960784, green: 0.2745098039, blue: 0.7568627451, alpha: 1)
let color3 = #colorLiteral(red: 0.968627451, green: 0.7882352941, blue: 0.1294117647, alpha: 1)
let color4 = #colorLiteral(red: 0.968627451, green: 0.4196078431, blue: 0.1098039216, alpha: 1)
vc.createAccountBtn.applyGradient(colors: [color1, color2], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0))
vc.createAccountBtn.roundCorner()
vc.loginBtn.applyGradient(colors: [color4, color3], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0, y: 0.8))
vc.loginBtn.roundCorner()
vc.passwordTF.roundCorner()
vc.userNameTF.roundCorner()
vc.passwordTF.enablePasswordToggle()
vc.passwordTF.rightView?.isHidden = true
}
// Function to handle tap on Password Toggle icon
@objc func passwordIconTapped() {
vc.passwordTF.isSelected.toggle()
vc.passwordTF.isSecureTextEntry.toggle()
}
}

View File

@@ -12,6 +12,10 @@ class SelectAvatarVM{
weak var vc : SelectAvatarVC!
func initView(){
let color1 = #colorLiteral(red: 0.144693464, green: 0.1426281333, blue: 0.6686832905, alpha: 1)
let color2 = #colorLiteral(red: 0.6901960784, green: 0.2745098039, blue: 0.7568627451, alpha: 1)
vc.nextBtn.applyGradient(colors: [color1, color2], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0))
vc.nextBtn.roundCorner()
setupCell()
}

View File

@@ -12,5 +12,6 @@ extension K{
struct StoryBoard{
static let main = "Main"
static let authenticationSB = "AuthenticationSB"
static let home = "Home"
}
}

View File

@@ -23,6 +23,13 @@ extension K{
static let userDetailsRegisterVC = "UserDetailsRegisterVC"
static let userIntrestVC = "UserIntrestVC"
static let selectAvatarVC = "SelectAvatarVC"
static let loginVC = "LoginVC"
static let resetPassUserNameVC = "ResetPassUserNameVC"
static let newPasswordVC = "NewPasswordVC"
}
struct Home{
static let homeVC = "HomeVC"
}
}

View File

@@ -36,12 +36,15 @@ extension UITextField {
extension UITextField {
func addRightButton(title: String?, tintColor : UIColor, btnImage : UIImage?, target: Any?, action: Selector) {
func addRightButton(title: String?, tintColor : UIColor, btnImage : UIImage?, selectedImage : UIImage? = nil, target: Any?, action: Selector) {
// Create a button
let button = UIButton(type: .system)
button.setTitle(title, for: .normal)
button.addTarget(target, action: action, for: .touchUpInside)
button.setImage(btnImage, for: .normal)
if let selectedImage{
button.setImage(selectedImage, for: .selected)
}
button.tintColor = tintColor
button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 10)
// Set the button as the right view of the text field

View File

@@ -5,4 +5,29 @@
// Created by Bilal on 03/05/2024.
//
import Foundation
import UIKit
extension UITextField {
fileprivate func setPasswordToggleImage(_ button: UIButton) {
if(isSecureTextEntry){
button.setImage(UIImage(named: "EyeOpenIcon"), for: .normal)
}else{
button.setImage(UIImage(named: "EyeCloseIcon"), for: .normal)
}
}
func enablePasswordToggle(){
let button = UIButton(type: .custom)
setPasswordToggleImage(button)
button.tintColor = UIColor.lightGray
button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 15)
button.frame = CGRect(x: CGFloat(self.frame.size.width - 25), y: CGFloat(5), width: CGFloat(25), height: CGFloat(25))
button.addTarget(self, action: #selector(self.togglePasswordView), for: .touchUpInside)
self.rightView = button
self.rightViewMode = .always
}
@IBAction func togglePasswordView(_ sender: Any) {
self.isSecureTextEntry = !self.isSecureTextEntry
setPasswordToggleImage(sender as! UIButton)
}
}

View File

@@ -5,4 +5,62 @@
// Created by Bilal on 03/05/2024.
//
import Foundation
import UIKit
class ValidatorClass {
static let sharedInstanec = ValidatorClass()
func validateName(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let currentText = textField.text ?? ""
// dont allow leading space for names
if (range.location == 0 && string == " ") {
return false
}
// Check if the replacement string is valid (contains only letters and spaces)
if !string.nameCharacterOnly(){return false}
// Ensure that the first and last characters are not spaces
if currentText.isEmpty && string == " " {
return false
}
// Allow only one space between first name, middle name, and last name
if string == " " {
let components = currentText.components(separatedBy: " ")
//Block user from adding 2 spaces in trailing word
if components.last == "" && string == " "{
return false
}
if (currentText as NSString).replacingCharacters(in: range, with: string).contains(" "){
return false
}
let filteredComponents = components.filter { !$0.isEmpty }
if filteredComponents.count >= 6 {
return false
}
}
// Check the length limit (e.g., adjust to your requirements)
let newLength = currentText.count + string.count - range.length
return newLength <= 50 // Adjust the limit as needed.
}
func limitCharacter(length : Int, _ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool{
let maxLength = length
let currentString = (textField.text ?? "") as NSString
let newString = currentString.replacingCharacters(in: range, with: string)
return newString.count <= maxLength
}
func limitCharacterTV(length : Int, _ textView: UITextView, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool{
let maxLength = length
let currentString = (textView.text ?? "") as NSString
let newString = currentString.replacingCharacters(in: range, with: string)
return newString.count <= maxLength
}
}

View File

@@ -1,7 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17150" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17122"/>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@@ -20,6 +22,7 @@
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Ief-a0-LHa" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="121" y="-27"/>
</scene>
</scenes>
<resources>

View File

@@ -60,6 +60,9 @@ class OnBoardVC: UIViewController {
}
@IBAction func loginBtnTapped(_ sender: UIButton) {
let sb = UIStoryboard(name: K.StoryBoard.authenticationSB, bundle: nil)
let vc = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Authentication.loginVC) as! LoginVC
self.navigationController?.pushViewController(vc, animated: true)
}

View File

@@ -29,36 +29,36 @@ class SplashVC: UIViewController {
}
@IBAction func languageBtnTapped(_ sender: UIButton) {
let sb = UIStoryboard(name: K.StoryBoard.authenticationSB, bundle: nil)
let vc = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Authentication.userIntrestVC) as! UserIntrestVC
self.navigationController?.pushViewController(vc, animated: true)
// switch sender{
// case hindiBtn:
// K.GVar.localized = K.LocalizedEnum.hindi
// case englishBtn:
// K.GVar.localized = K.LocalizedEnum.english
// default:
// K.GVar.localized = K.LocalizedEnum.english
// }
//
// let sb = UIStoryboard(name: K.StoryBoard.main, bundle: nil)
// let vc = sb.instantiateViewController(withIdentifier: K.StoryBoardID.OnBoarding.onBoardVC) as! OnBoardVC
//
// // Create a CATransition instance
// let transition = CATransition()
// transition.duration = 0.3 // Set the duration of the animation
// transition.type = CATransitionType.fade // Set the type of animation to fade
//
// // Optionally, set other properties such as timing function, subtype, etc.
// // transition.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
// // transition.subtype = CATransitionSubtype.fromTop
//
// // Get the navigation controller
// guard let navigationController = navigationController else { return }
//
// // Perform the push animation with the custom transition
// navigationController.view.layer.add(transition, forKey: nil)
// navigationController.pushViewController(vc, animated: false)
// let sb = UIStoryboard(name: K.StoryBoard.authenticationSB, bundle: nil)
// let vc = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Authentication.loginVC) as! LoginVC
// self.navigationController?.pushViewController(vc, animated: true)
switch sender{
case hindiBtn:
K.GVar.localized = K.LocalizedEnum.hindi
case englishBtn:
K.GVar.localized = K.LocalizedEnum.english
default:
K.GVar.localized = K.LocalizedEnum.english
}
let sb = UIStoryboard(name: K.StoryBoard.main, bundle: nil)
let vc = sb.instantiateViewController(withIdentifier: K.StoryBoardID.OnBoarding.onBoardVC) as! OnBoardVC
// Create a CATransition instance
let transition = CATransition()
transition.duration = 0.3 // Set the duration of the animation
transition.type = CATransitionType.fade // Set the type of animation to fade
// Optionally, set other properties such as timing function, subtype, etc.
// transition.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
// transition.subtype = CATransitionSubtype.fromTop
// Get the navigation controller
guard let navigationController = navigationController else { return }
// Perform the push animation with the custom transition
navigationController.view.layer.add(transition, forKey: nil)
navigationController.pushViewController(vc, animated: false)
}
func animateImageScale() {