Prechádzať zdrojové kódy

160616 회원가입, 관리 메뉴 플로우 정검&수정

eunmi.kim 8 rokov pred
rodič
commit
d2ae398b45
28 zmenil súbory, kde vykonal 457 pridanie a 260 odobranie
  1. 71 71
      OneCable/Base.lproj/HomeMember.storyboard
  2. 1 0
      OneCable/Base.lproj/Localizable.strings
  3. 45 43
      OneCable/Base.lproj/Main.storyboard
  4. 40 19
      OneCable/Base.lproj/Settings.storyboard
  5. 4 3
      OneCable/Classes/Definitions.h
  6. 13 6
      OneCable/Classes/Model/LoginModel.m
  7. 4 4
      OneCable/Classes/Util/ValidateUtil.m
  8. 13 5
      OneCable/Classes/ViewControllers/HomeHubScreens/HomeHubViewController.m
  9. 9 3
      OneCable/Classes/ViewControllers/HomeHubScreens/HomeHubWifiPasswdInputViewController.m
  10. 10 0
      OneCable/Classes/ViewControllers/HomeHubScreens/HomeHubWifiSearchSuccessViewController.m
  11. 5 1
      OneCable/Classes/ViewControllers/HomeMemberScreens/HomeMemberAddViewController.m
  12. 42 19
      OneCable/Classes/ViewControllers/MainScreens/LoginViewController.m
  13. 2 0
      OneCable/Classes/ViewControllers/MainScreens/ManagementViewController.h
  14. 6 13
      OneCable/Classes/ViewControllers/MainScreens/ManagementViewController.m
  15. 1 0
      OneCable/Classes/ViewControllers/MainScreens/NoticeViewController.m
  16. 37 2
      OneCable/Classes/ViewControllers/SettingsScreens/SettingsPasswdInputViewController.m
  17. 47 4
      OneCable/Classes/ViewControllers/SettingsScreens/SettingsPasswdSetViewController.m
  18. 3 3
      OneCable/Classes/ViewControllers/SettingsScreens/SettingsViewController.m
  19. 3 0
      OneCable/Classes/ViewControllers/SignUpScreens/CertificationViewController.m
  20. 3 0
      OneCable/Classes/ViewControllers/SignUpScreens/IDSetViewController.m
  21. 1 1
      OneCable/Classes/ViewControllers/SignUpScreens/PwAnswerViewController.m
  22. 1 0
      OneCable/Classes/ViewControllers/SignUpScreens/PwFindViewController.m
  23. 19 40
      OneCable/Classes/ViewControllers/SignUpScreens/QuizViewController.m
  24. 8 0
      OneCable/Classes/ViewControllers/SignUpScreens/UserNameSetViewController.m
  25. 4 1
      OneCable/Classes/ViewControllers/ThingsScreens/ChangeDeviceNamePopupView.h
  26. 55 16
      OneCable/Classes/ViewControllers/ThingsScreens/ChangeDeviceNamePopupView.m
  27. 0 4
      OneCable/Classes/ViewControllers/ThingsScreens/ThingsAddCompleteViewController.m
  28. 10 2
      OneCable/Classes/ViewControllers/ThingsScreens/ThingsViewController.m

+ 71 - 71
OneCable/Base.lproj/HomeMember.storyboard

@@ -923,78 +923,8 @@
                                                     <outlet property="txtEmail" destination="Ekh-ig-KOo" id="FZR-qP-ahY"/>
                                                 </connections>
                                             </tableViewCell>
-                                            <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="InputCellIdentifier" rowHeight="84" id="bi8-hy-Fsl" customClass="MemberInputTableViewCell">
-                                                <rect key="frame" x="0.0" y="187" width="320" height="84"/>
-                                                <autoresizingMask key="autoresizingMask"/>
-                                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="bi8-hy-Fsl" id="hII-gY-f50">
-                                                    <rect key="frame" x="0.0" y="0.0" width="320" height="84"/>
-                                                    <autoresizingMask key="autoresizingMask"/>
-                                                    <subviews>
-                                                        <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="249" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="휴대폰 번호 등록" minimumFontSize="17" background="img_input_round_bg_default" translatesAutoresizingMaskIntoConstraints="NO" id="YLj-Xv-EHC" customClass="CustomTextField">
-                                                            <rect key="frame" x="15" y="19" width="243" height="48"/>
-                                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                                                            <textInputTraits key="textInputTraits"/>
-                                                            <userDefinedRuntimeAttributes>
-                                                                <userDefinedRuntimeAttribute type="rect" keyPath="rectForCapBackground">
-                                                                    <rect key="value" x="16" y="16" width="16" height="16"/>
-                                                                </userDefinedRuntimeAttribute>
-                                                                <userDefinedRuntimeAttribute type="boolean" keyPath="autoScrollUp" value="YES"/>
-                                                                <userDefinedRuntimeAttribute type="string" keyPath="bgImageName" value="img_input_round_bg_default"/>
-                                                                <userDefinedRuntimeAttribute type="string" keyPath="bgPressImageName" value="img_input_round_bg_active"/>
-                                                                <userDefinedRuntimeAttribute type="string" keyPath="bgDisableImageName" value="img_input_round_bg_disable"/>
-                                                            </userDefinedRuntimeAttributes>
-                                                        </textField>
-                                                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="N42-x4-aJH" customClass="CustomButton">
-                                                            <rect key="frame" x="265" y="23" width="40" height="40"/>
-                                                            <constraints>
-                                                                <constraint firstAttribute="height" constant="40" id="BRB-tu-zqm"/>
-                                                                <constraint firstAttribute="width" constant="40" id="i2K-3a-rha"/>
-                                                            </constraints>
-                                                            <fontDescription key="fontDescription" type="system" pointSize="15"/>
-                                                            <state key="normal" image="common_list_btn_add"/>
-                                                            <state key="highlighted" image="common_list_btn_add_press"/>
-                                                        </button>
-                                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Zro-Ev-dcf">
-                                                            <rect key="frame" x="305" y="0.0" width="15" height="83"/>
-                                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
-                                                            <constraints>
-                                                                <constraint firstAttribute="width" constant="15" id="zzS-X2-9ee"/>
-                                                            </constraints>
-                                                        </view>
-                                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gLv-9t-yQV">
-                                                            <rect key="frame" x="0.0" y="0.0" width="15" height="83"/>
-                                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
-                                                            <constraints>
-                                                                <constraint firstAttribute="width" constant="15" id="pYC-K2-lGQ"/>
-                                                            </constraints>
-                                                        </view>
-                                                    </subviews>
-                                                    <constraints>
-                                                        <constraint firstItem="gLv-9t-yQV" firstAttribute="leading" secondItem="hII-gY-f50" secondAttribute="leading" id="9Hj-R4-jQx"/>
-                                                        <constraint firstAttribute="trailing" secondItem="Zro-Ev-dcf" secondAttribute="trailing" id="ARI-O8-1Q2"/>
-                                                        <constraint firstItem="gLv-9t-yQV" firstAttribute="top" secondItem="hII-gY-f50" secondAttribute="top" id="GZ0-dR-kZR"/>
-                                                        <constraint firstItem="Zro-Ev-dcf" firstAttribute="top" secondItem="hII-gY-f50" secondAttribute="top" id="JZc-8C-rdr"/>
-                                                        <constraint firstItem="YLj-Xv-EHC" firstAttribute="leading" secondItem="gLv-9t-yQV" secondAttribute="trailing" id="L3H-Iw-j0O"/>
-                                                        <constraint firstItem="Zro-Ev-dcf" firstAttribute="leading" secondItem="N42-x4-aJH" secondAttribute="trailing" id="NCF-gf-7H6"/>
-                                                        <constraint firstAttribute="bottom" secondItem="gLv-9t-yQV" secondAttribute="bottom" id="TsI-kh-bcR"/>
-                                                        <constraint firstItem="YLj-Xv-EHC" firstAttribute="top" secondItem="hII-gY-f50" secondAttribute="top" constant="19" id="XPV-1H-2rT"/>
-                                                        <constraint firstItem="N42-x4-aJH" firstAttribute="centerY" secondItem="YLj-Xv-EHC" secondAttribute="centerY" id="Xus-ra-C29"/>
-                                                        <constraint firstAttribute="bottom" secondItem="Zro-Ev-dcf" secondAttribute="bottom" id="auG-pg-ye5"/>
-                                                        <constraint firstAttribute="bottom" secondItem="YLj-Xv-EHC" secondAttribute="bottom" constant="16" id="ybr-Xw-ii8"/>
-                                                        <constraint firstItem="N42-x4-aJH" firstAttribute="leading" secondItem="YLj-Xv-EHC" secondAttribute="trailing" constant="5" id="yr2-E1-fHd">
-                                                            <variation key="heightClass=regular-widthClass=compact" constant="7"/>
-                                                        </constraint>
-                                                    </constraints>
-                                                </tableViewCellContentView>
-                                                <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
-                                                <connections>
-                                                    <outlet property="btnAdd" destination="N42-x4-aJH" id="0se-C5-dQd"/>
-                                                    <outlet property="txtEmail" destination="YLj-Xv-EHC" id="oFe-VP-YPD"/>
-                                                </connections>
-                                            </tableViewCell>
                                             <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="QuizCellIdentifier" rowHeight="500" id="QV3-qo-Sdi" customClass="MemberQuizTableViewCell">
-                                                <rect key="frame" x="0.0" y="271" width="320" height="500"/>
+                                                <rect key="frame" x="0.0" y="187" width="320" height="500"/>
                                                 <autoresizingMask key="autoresizingMask"/>
                                                 <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="QV3-qo-Sdi" id="jji-K5-hVN">
                                                     <rect key="frame" x="0.0" y="0.0" width="320" height="500"/>
@@ -1315,6 +1245,76 @@
                                                     <outlet property="viewSelfQuiz" destination="7Ng-1Q-Y4l" id="dQ0-9P-R2G"/>
                                                 </connections>
                                             </tableViewCell>
+                                            <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="InputCellIdentifier" rowHeight="84" id="bi8-hy-Fsl" customClass="MemberInputTableViewCell">
+                                                <rect key="frame" x="0.0" y="687" width="320" height="84"/>
+                                                <autoresizingMask key="autoresizingMask"/>
+                                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="bi8-hy-Fsl" id="hII-gY-f50">
+                                                    <rect key="frame" x="0.0" y="0.0" width="320" height="84"/>
+                                                    <autoresizingMask key="autoresizingMask"/>
+                                                    <subviews>
+                                                        <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="249" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="휴대폰 번호 등록" minimumFontSize="17" background="img_input_round_bg_default" translatesAutoresizingMaskIntoConstraints="NO" id="YLj-Xv-EHC" customClass="CustomTextField">
+                                                            <rect key="frame" x="15" y="19" width="243" height="48"/>
+                                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                                                            <textInputTraits key="textInputTraits"/>
+                                                            <userDefinedRuntimeAttributes>
+                                                                <userDefinedRuntimeAttribute type="rect" keyPath="rectForCapBackground">
+                                                                    <rect key="value" x="16" y="16" width="16" height="16"/>
+                                                                </userDefinedRuntimeAttribute>
+                                                                <userDefinedRuntimeAttribute type="boolean" keyPath="autoScrollUp" value="YES"/>
+                                                                <userDefinedRuntimeAttribute type="string" keyPath="bgImageName" value="img_input_round_bg_default"/>
+                                                                <userDefinedRuntimeAttribute type="string" keyPath="bgPressImageName" value="img_input_round_bg_active"/>
+                                                                <userDefinedRuntimeAttribute type="string" keyPath="bgDisableImageName" value="img_input_round_bg_disable"/>
+                                                            </userDefinedRuntimeAttributes>
+                                                        </textField>
+                                                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="N42-x4-aJH" customClass="CustomButton">
+                                                            <rect key="frame" x="265" y="23" width="40" height="40"/>
+                                                            <constraints>
+                                                                <constraint firstAttribute="height" constant="40" id="BRB-tu-zqm"/>
+                                                                <constraint firstAttribute="width" constant="40" id="i2K-3a-rha"/>
+                                                            </constraints>
+                                                            <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                                                            <state key="normal" image="common_list_btn_add"/>
+                                                            <state key="highlighted" image="common_list_btn_add_press"/>
+                                                        </button>
+                                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Zro-Ev-dcf">
+                                                            <rect key="frame" x="305" y="0.0" width="15" height="83"/>
+                                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                                                            <constraints>
+                                                                <constraint firstAttribute="width" constant="15" id="zzS-X2-9ee"/>
+                                                            </constraints>
+                                                        </view>
+                                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gLv-9t-yQV">
+                                                            <rect key="frame" x="0.0" y="0.0" width="15" height="83"/>
+                                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                                                            <constraints>
+                                                                <constraint firstAttribute="width" constant="15" id="pYC-K2-lGQ"/>
+                                                            </constraints>
+                                                        </view>
+                                                    </subviews>
+                                                    <constraints>
+                                                        <constraint firstItem="gLv-9t-yQV" firstAttribute="leading" secondItem="hII-gY-f50" secondAttribute="leading" id="9Hj-R4-jQx"/>
+                                                        <constraint firstAttribute="trailing" secondItem="Zro-Ev-dcf" secondAttribute="trailing" id="ARI-O8-1Q2"/>
+                                                        <constraint firstItem="gLv-9t-yQV" firstAttribute="top" secondItem="hII-gY-f50" secondAttribute="top" id="GZ0-dR-kZR"/>
+                                                        <constraint firstItem="Zro-Ev-dcf" firstAttribute="top" secondItem="hII-gY-f50" secondAttribute="top" id="JZc-8C-rdr"/>
+                                                        <constraint firstItem="YLj-Xv-EHC" firstAttribute="leading" secondItem="gLv-9t-yQV" secondAttribute="trailing" id="L3H-Iw-j0O"/>
+                                                        <constraint firstItem="Zro-Ev-dcf" firstAttribute="leading" secondItem="N42-x4-aJH" secondAttribute="trailing" id="NCF-gf-7H6"/>
+                                                        <constraint firstAttribute="bottom" secondItem="gLv-9t-yQV" secondAttribute="bottom" id="TsI-kh-bcR"/>
+                                                        <constraint firstItem="YLj-Xv-EHC" firstAttribute="top" secondItem="hII-gY-f50" secondAttribute="top" constant="19" id="XPV-1H-2rT"/>
+                                                        <constraint firstItem="N42-x4-aJH" firstAttribute="centerY" secondItem="YLj-Xv-EHC" secondAttribute="centerY" id="Xus-ra-C29"/>
+                                                        <constraint firstAttribute="bottom" secondItem="Zro-Ev-dcf" secondAttribute="bottom" id="auG-pg-ye5"/>
+                                                        <constraint firstAttribute="bottom" secondItem="YLj-Xv-EHC" secondAttribute="bottom" constant="16" id="ybr-Xw-ii8"/>
+                                                        <constraint firstItem="N42-x4-aJH" firstAttribute="leading" secondItem="YLj-Xv-EHC" secondAttribute="trailing" constant="5" id="yr2-E1-fHd">
+                                                            <variation key="heightClass=regular-widthClass=compact" constant="7"/>
+                                                        </constraint>
+                                                    </constraints>
+                                                </tableViewCellContentView>
+                                                <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                                                <connections>
+                                                    <outlet property="btnAdd" destination="N42-x4-aJH" id="0se-C5-dQd"/>
+                                                    <outlet property="txtEmail" destination="YLj-Xv-EHC" id="oFe-VP-YPD"/>
+                                                </connections>
+                                            </tableViewCell>
                                         </prototypes>
                                     </tableView>
                                     <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="shadow_top" translatesAutoresizingMaskIntoConstraints="NO" id="91P-Zy-F3T">

+ 1 - 0
OneCable/Base.lproj/Localizable.strings

@@ -224,6 +224,7 @@
 "%@ 입력하세요" = "%@ 입력하세요";
 
 "죄송합니다\n현재 항목의 리스트가 존재하지 않습니다" = "죄송합니다\n현재 항목의 리스트가 존재하지 않습니다";
+"사용자 이름 설정 가이드를 다시 확인하세요." = "사용자 이름 설정 가이드를 다시 확인하세요.";
 
 
 

+ 45 - 43
OneCable/Base.lproj/Main.storyboard

@@ -1536,6 +1536,8 @@
                         <outlet property="btnModeNight" destination="Pe4-E8-CBK" id="Esi-3o-QFu"/>
                         <outlet property="btnNotice" destination="8Dy-i7-CW3" id="aHl-X9-PiP"/>
                         <outlet property="btnSet" destination="nJn-Uu-IUe" id="3qG-a1-cSH"/>
+                        <outlet property="imgNoticeCount" destination="1Gi-qG-87G" id="IdG-cG-nRq"/>
+                        <outlet property="imgPushCount" destination="Wtr-OC-NfN" id="VXf-1A-tSY"/>
                         <outlet property="imgvComingChecked" destination="Jnx-0z-GIM" id="kwf-X4-k4j"/>
                         <outlet property="imgvHomehubOff" destination="F11-6w-iRe" id="02G-DO-dV4"/>
                         <outlet property="imgvLogo" destination="Vbv-zv-GUN" id="mL2-8D-Ja2"/>
@@ -2283,7 +2285,7 @@
                                                                     <rect key="frame" x="0.0" y="0.0" width="320" height="81"/>
                                                                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
                                                                 </imageView>
-                                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="공지사항 입니다.  공지사항 입니다." lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eSe-UQ-IR0" userLabel="Label - content" customClass="CustomLabel">
+                                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="공지사항 입니다.  공지사항 입니다." lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eSe-UQ-IR0" userLabel="Label - content" customClass="CustomLabel">
                                                                     <rect key="frame" x="40" y="20" width="265" height="21"/>
                                                                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
                                                                     <constraints>
@@ -2712,13 +2714,13 @@
                                                     <autoresizingMask key="autoresizingMask"/>
                                                     <subviews>
                                                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2a0-x7-jc2" userLabel="View - Cell">
-                                                            <rect key="frame" x="0.0" y="0.0" width="320" height="81"/>
+                                                            <rect key="frame" x="0.0" y="0.0" width="320" height="2"/>
                                                             <subviews>
                                                                 <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="252" verticalHuggingPriority="251" horizontalCompressionResistancePriority="749" image="common_bg_list_03" translatesAutoresizingMaskIntoConstraints="NO" id="Ggs-kS-v3C" customClass="CustomImageView">
-                                                                    <rect key="frame" x="0.0" y="0.0" width="320" height="81"/>
+                                                                    <rect key="frame" x="0.0" y="0.0" width="320" height="2"/>
                                                                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
                                                                 </imageView>
-                                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="010-1234-5678 님을 초대했습니다." lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tla-ML-KLT" customClass="CustomLabel">
+                                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="010-1234-5678 님을 초대했습니다." lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tla-ML-KLT" customClass="CustomLabel">
                                                                     <rect key="frame" x="15" y="20" width="290" height="21"/>
                                                                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
                                                                     <constraints>
@@ -2728,7 +2730,7 @@
                                                                     <nil key="highlightedColor"/>
                                                                 </label>
                                                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2017-04-04 12:34" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RUV-FQ-PGy" customClass="CustomLabel">
-                                                                    <rect key="frame" x="15" y="41" width="290" height="20"/>
+                                                                    <rect key="frame" x="15" y="46" width="290" height="20"/>
                                                                     <constraints>
                                                                         <constraint firstAttribute="height" constant="20" id="oFV-JZ-8Re"/>
                                                                     </constraints>
@@ -2737,14 +2739,14 @@
                                                                     <nil key="highlightedColor"/>
                                                                 </label>
                                                                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="FcU-gl-h5i">
-                                                                    <rect key="frame" x="0.0" y="0.0" width="15" height="81"/>
+                                                                    <rect key="frame" x="0.0" y="0.0" width="15" height="2"/>
                                                                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
                                                                     <constraints>
                                                                         <constraint firstAttribute="width" constant="15" id="ut7-rd-6Ux"/>
                                                                     </constraints>
                                                                 </view>
                                                                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Fu9-Lb-Ksv">
-                                                                    <rect key="frame" x="305" y="0.0" width="15" height="81"/>
+                                                                    <rect key="frame" x="305" y="0.0" width="15" height="2"/>
                                                                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
                                                                     <constraints>
                                                                         <constraint firstAttribute="width" constant="15" id="8Pa-bY-Q5E"/>
@@ -2758,7 +2760,7 @@
                                                                     </constraints>
                                                                 </view>
                                                                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="rl8-iZ-XhQ">
-                                                                    <rect key="frame" x="15" y="61" width="290" height="20"/>
+                                                                    <rect key="frame" x="15" y="66" width="290" height="20"/>
                                                                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
                                                                     <constraints>
                                                                         <constraint firstAttribute="height" constant="20" id="Bq9-X7-AYN"/>
@@ -2815,7 +2817,7 @@
                                                                 <constraint firstItem="Fu9-Lb-Ksv" firstAttribute="leading" secondItem="rl8-iZ-XhQ" secondAttribute="trailing" id="NC3-YE-sQm"/>
                                                                 <constraint firstAttribute="bottom" secondItem="Fu9-Lb-Ksv" secondAttribute="bottom" id="NZX-AZ-pRi"/>
                                                                 <constraint firstAttribute="bottom" secondItem="FcU-gl-h5i" secondAttribute="bottom" id="OIX-li-lnE"/>
-                                                                <constraint firstItem="RUV-FQ-PGy" firstAttribute="top" secondItem="tla-ML-KLT" secondAttribute="bottom" id="RFc-8Y-QIg"/>
+                                                                <constraint firstItem="RUV-FQ-PGy" firstAttribute="top" secondItem="tla-ML-KLT" secondAttribute="bottom" constant="5" id="RFc-8Y-QIg"/>
                                                                 <constraint firstAttribute="trailing" secondItem="Fu9-Lb-Ksv" secondAttribute="trailing" id="VG8-m5-guR"/>
                                                                 <constraint firstItem="rl8-iZ-XhQ" firstAttribute="leading" secondItem="FcU-gl-h5i" secondAttribute="trailing" id="XD4-Nj-eLA"/>
                                                                 <constraint firstAttribute="trailing" secondItem="Ggs-kS-v3C" secondAttribute="trailing" id="cd3-AQ-xXm"/>
@@ -2836,7 +2838,7 @@
                                                             </variation>
                                                         </view>
                                                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5Yx-zF-uWF" userLabel="View - line">
-                                                            <rect key="frame" x="0.0" y="80" width="320" height="1"/>
+                                                            <rect key="frame" x="0.0" y="1" width="320" height="1"/>
                                                             <subviews>
                                                                 <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="common_bg_line_01" translatesAutoresizingMaskIntoConstraints="NO" id="H7N-46-1Me">
                                                                     <rect key="frame" x="0.0" y="0.0" width="320" height="1"/>
@@ -4498,35 +4500,26 @@
                                                                             <fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
                                                                             <nil key="highlightedColor"/>
                                                                         </label>
-                                                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" placeholderIntrinsicWidth="210" placeholderIntrinsicHeight="20" text="2.3.1" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yDZ-C8-9ch" customClass="CustomLabel">
-                                                                            <rect key="frame" x="33" y="0.0" width="40" height="20"/>
+                                                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" placeholderIntrinsicWidth="210" placeholderIntrinsicHeight="20" text="" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yDZ-C8-9ch" customClass="CustomLabel">
+                                                                            <rect key="frame" x="33" y="0.0" width="50" height="20"/>
                                                                             <constraints>
-                                                                                <constraint firstAttribute="width" constant="40" id="0fg-wI-hlx"/>
+                                                                                <constraint firstAttribute="width" constant="50" id="0fg-wI-hlx"/>
                                                                                 <constraint firstAttribute="height" constant="20" id="QGY-m4-uVJ"/>
                                                                             </constraints>
                                                                             <fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
                                                                             <nil key="highlightedColor"/>
                                                                         </label>
-                                                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" placeholderIntrinsicWidth="210" placeholderIntrinsicHeight="20" text="최신" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1cA-aS-Slc" customClass="CustomLabel">
-                                                                            <rect key="frame" x="83" y="0.0" width="33" height="20"/>
-                                                                            <constraints>
-                                                                                <constraint firstAttribute="height" constant="20" id="ImN-q7-Pje"/>
-                                                                                <constraint firstAttribute="width" constant="33" id="yqe-PU-19B"/>
-                                                                            </constraints>
-                                                                            <fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
-                                                                            <nil key="highlightedColor"/>
-                                                                        </label>
                                                                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" placeholderIntrinsicWidth="210" placeholderIntrinsicHeight="20" text="2.3.1" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tl6-F7-f93" customClass="CustomLabel">
-                                                                            <rect key="frame" x="116" y="0.0" width="40" height="20"/>
+                                                                            <rect key="frame" x="126" y="0.0" width="50" height="20"/>
                                                                             <constraints>
-                                                                                <constraint firstAttribute="width" constant="40" id="4g6-Eo-1Bl"/>
+                                                                                <constraint firstAttribute="width" constant="50" id="4g6-Eo-1Bl"/>
                                                                                 <constraint firstAttribute="height" constant="20" id="7iY-cQ-vpr"/>
                                                                             </constraints>
                                                                             <fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
                                                                             <nil key="highlightedColor"/>
                                                                         </label>
                                                                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" placeholderIntrinsicWidth="210" placeholderIntrinsicHeight="20" text="/" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Mdg-ly-ce8" customClass="CustomLabel">
-                                                                            <rect key="frame" x="73" y="0.0" width="10" height="20"/>
+                                                                            <rect key="frame" x="83" y="0.0" width="10" height="20"/>
                                                                             <constraints>
                                                                                 <constraint firstAttribute="height" constant="20" id="9wp-aw-SSW"/>
                                                                                 <constraint firstAttribute="width" constant="10" id="U1N-qY-ixC"/>
@@ -4534,6 +4527,15 @@
                                                                             <fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
                                                                             <nil key="highlightedColor"/>
                                                                         </label>
+                                                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" placeholderIntrinsicWidth="210" placeholderIntrinsicHeight="20" text="최신" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1cA-aS-Slc" customClass="CustomLabel">
+                                                                            <rect key="frame" x="93" y="0.0" width="33" height="20"/>
+                                                                            <constraints>
+                                                                                <constraint firstAttribute="height" constant="20" id="ImN-q7-Pje"/>
+                                                                                <constraint firstAttribute="width" constant="33" id="yqe-PU-19B"/>
+                                                                            </constraints>
+                                                                            <fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
+                                                                            <nil key="highlightedColor"/>
+                                                                        </label>
                                                                     </subviews>
                                                                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
                                                                     <constraints>
@@ -4563,16 +4565,16 @@
                                                                             <nil key="highlightedColor"/>
                                                                         </label>
                                                                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" placeholderIntrinsicWidth="210" placeholderIntrinsicHeight="20" text="2.3.1" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ktd-pu-nG6" customClass="CustomLabel">
-                                                                            <rect key="frame" x="33" y="0.0" width="40" height="20"/>
+                                                                            <rect key="frame" x="33" y="0.0" width="50" height="20"/>
                                                                             <constraints>
                                                                                 <constraint firstAttribute="height" constant="20" id="Npo-Ef-ofa"/>
-                                                                                <constraint firstAttribute="width" constant="40" id="fzs-Cn-25b"/>
+                                                                                <constraint firstAttribute="width" constant="50" id="fzs-Cn-25b"/>
                                                                             </constraints>
                                                                             <fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
                                                                             <nil key="highlightedColor"/>
                                                                         </label>
                                                                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" placeholderIntrinsicWidth="210" placeholderIntrinsicHeight="20" text="최신" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pKe-Bh-B2X" customClass="CustomLabel">
-                                                                            <rect key="frame" x="83" y="0.0" width="33" height="20"/>
+                                                                            <rect key="frame" x="93" y="0.0" width="33" height="20"/>
                                                                             <constraints>
                                                                                 <constraint firstAttribute="height" constant="20" id="2eM-OS-s5Z"/>
                                                                                 <constraint firstAttribute="width" constant="33" id="z1I-hn-lGg"/>
@@ -4581,16 +4583,16 @@
                                                                             <nil key="highlightedColor"/>
                                                                         </label>
                                                                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" placeholderIntrinsicWidth="210" placeholderIntrinsicHeight="20" text="2.3.1" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tca-JO-pcb" customClass="CustomLabel">
-                                                                            <rect key="frame" x="116" y="0.0" width="40" height="20"/>
+                                                                            <rect key="frame" x="126" y="0.0" width="50" height="20"/>
                                                                             <constraints>
                                                                                 <constraint firstAttribute="height" constant="20" id="0Uo-71-Q9i"/>
-                                                                                <constraint firstAttribute="width" constant="40" id="9Rf-Tl-tY5"/>
+                                                                                <constraint firstAttribute="width" constant="50" id="9Rf-Tl-tY5"/>
                                                                             </constraints>
                                                                             <fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
                                                                             <nil key="highlightedColor"/>
                                                                         </label>
                                                                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" placeholderIntrinsicWidth="210" placeholderIntrinsicHeight="20" text="/" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TMf-tv-tD9" customClass="CustomLabel">
-                                                                            <rect key="frame" x="73" y="0.0" width="10" height="20"/>
+                                                                            <rect key="frame" x="83" y="0.0" width="10" height="20"/>
                                                                             <constraints>
                                                                                 <constraint firstAttribute="width" constant="10" id="8XG-Tm-R1m"/>
                                                                                 <constraint firstAttribute="height" constant="20" id="O2R-3s-nji"/>
@@ -6640,7 +6642,7 @@
                                                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Sxo-b0-E7i" userLabel="View - line">
                                                             <rect key="frame" x="0.0" y="80.5" width="320" height="1"/>
                                                             <subviews>
-                                                                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="common_bg_line_01" translatesAutoresizingMaskIntoConstraints="NO" id="IVx-9N-QmT">
+                                                                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="common_bg_line_01" translatesAutoresizingMaskIntoConstraints="NO" id="IVx-9N-QmT">
                                                                     <rect key="frame" x="0.0" y="0.0" width="240" height="1"/>
                                                                     <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                                                 </imageView>
@@ -6937,7 +6939,7 @@
                                             <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XTY-Pr-k3y" userLabel="View - line">
                                                 <rect key="frame" x="0.0" y="87" width="320" height="1"/>
                                                 <subviews>
-                                                    <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="common_bg_line_01" translatesAutoresizingMaskIntoConstraints="NO" id="7XB-9D-goG">
+                                                    <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="common_bg_line_01" translatesAutoresizingMaskIntoConstraints="NO" id="7XB-9D-goG">
                                                         <rect key="frame" x="0.0" y="0.0" width="240" height="1"/>
                                                         <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                                     </imageView>
@@ -6968,13 +6970,6 @@
                                             <constraint firstItem="TGu-iS-b9Z" firstAttribute="top" secondItem="Qe0-LH-yW7" secondAttribute="top" id="zYm-9n-sek"/>
                                         </constraints>
                                     </view>
-                                    <webView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Knb-PM-tlG">
-                                        <rect key="frame" x="0.0" y="158" width="320" height="360"/>
-                                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
-                                        <connections>
-                                            <outlet property="delegate" destination="HR6-TX-aFP" id="Jy4-Z4-sBJ"/>
-                                        </connections>
-                                    </webView>
                                     <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="249" verticalCompressionResistancePriority="749" image="shadow_top" translatesAutoresizingMaskIntoConstraints="NO" id="CUY-dm-RGR">
                                         <rect key="frame" x="0.0" y="70" width="320" height="6"/>
                                         <constraints>
@@ -7032,6 +7027,13 @@
                                             </mask>
                                         </variation>
                                     </view>
+                                    <webView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Knb-PM-tlG">
+                                        <rect key="frame" x="10" y="168" width="300" height="350"/>
+                                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                                        <connections>
+                                            <outlet property="delegate" destination="HR6-TX-aFP" id="Jy4-Z4-sBJ"/>
+                                        </connections>
+                                    </webView>
                                 </subviews>
                                 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
                                 <constraints>
@@ -7045,12 +7047,12 @@
                                     <constraint firstAttribute="trailing" secondItem="70i-sR-spM" secondAttribute="trailing" id="g2U-u0-DdD"/>
                                     <constraint firstItem="Qe0-LH-yW7" firstAttribute="leading" secondItem="LVw-B8-ZPD" secondAttribute="leading" id="gGC-ko-Rek"/>
                                     <constraint firstAttribute="trailing" secondItem="Qe0-LH-yW7" secondAttribute="trailing" id="l5x-ZF-GGc"/>
-                                    <constraint firstAttribute="trailing" secondItem="Knb-PM-tlG" secondAttribute="trailing" id="lUV-fv-ShD"/>
+                                    <constraint firstAttribute="trailing" secondItem="Knb-PM-tlG" secondAttribute="trailing" constant="10" id="lUV-fv-ShD"/>
                                     <constraint firstItem="CUY-dm-RGR" firstAttribute="top" secondItem="70i-sR-spM" secondAttribute="bottom" id="mjm-rJ-wJn"/>
                                     <constraint firstItem="70i-sR-spM" firstAttribute="leading" secondItem="LVw-B8-ZPD" secondAttribute="leading" id="oHB-hz-OfS"/>
                                     <constraint firstAttribute="trailing" secondItem="CUY-dm-RGR" secondAttribute="trailing" id="oKZ-hX-lao"/>
-                                    <constraint firstItem="Knb-PM-tlG" firstAttribute="top" secondItem="Qe0-LH-yW7" secondAttribute="bottom" id="y63-DU-3oN"/>
-                                    <constraint firstItem="Knb-PM-tlG" firstAttribute="leading" secondItem="LVw-B8-ZPD" secondAttribute="leading" id="z39-N7-ISe"/>
+                                    <constraint firstItem="Knb-PM-tlG" firstAttribute="top" secondItem="Qe0-LH-yW7" secondAttribute="bottom" constant="10" id="y63-DU-3oN"/>
+                                    <constraint firstItem="Knb-PM-tlG" firstAttribute="leading" secondItem="LVw-B8-ZPD" secondAttribute="leading" constant="10" id="z39-N7-ISe"/>
                                 </constraints>
                             </view>
                         </subviews>

+ 40 - 19
OneCable/Base.lproj/Settings.storyboard

@@ -139,6 +139,9 @@
                                         <userDefinedRuntimeAttributes>
                                             <userDefinedRuntimeAttribute type="boolean" keyPath="autoScrollUp" value="YES"/>
                                         </userDefinedRuntimeAttributes>
+                                        <connections>
+                                            <outlet property="delegate" destination="C69-ZM-5jv" id="rIe-NV-PY2"/>
+                                        </connections>
                                     </textField>
                                     <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="최대 7자리,한글/영문 소문자/숫자 사용가능" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontForContentSizeCategory="YES" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="z4R-sD-WiD">
                                         <rect key="frame" x="15" y="120" width="290" height="20"/>
@@ -223,9 +226,12 @@
                                         <rect key="frame" x="160" y="0.0" width="160" height="50"/>
                                         <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
                                         <fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
-                                        <state key="normal" title="저장" backgroundImage="common_button_right_bg">
+                                        <state key="normal" title="확인" backgroundImage="common_button_right_bg">
                                             <color key="titleColor" red="0.011764705882352941" green="0.60392156862745094" blue="0.87450980392156863" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                         </state>
+                                        <state key="disabled">
+                                            <color key="titleColor" red="0.79215686269999996" green="0.80784313730000001" blue="0.84705882349999995" alpha="1" colorSpace="calibratedRGB"/>
+                                        </state>
                                         <state key="highlighted" backgroundImage="common_button_right_bg_press"/>
                                         <userDefinedRuntimeAttributes>
                                             <userDefinedRuntimeAttribute type="color" keyPath="placeHolderColor">
@@ -855,18 +861,6 @@
                                             <constraint firstAttribute="height" constant="19" id="Zoi-7e-GhO"/>
                                         </constraints>
                                     </view>
-                                    <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" minimumFontSize="17" background="img_input_round_bg_default" translatesAutoresizingMaskIntoConstraints="NO" id="tkZ-kz-7ZX" customClass="CustomTextField">
-                                        <rect key="frame" x="15" y="95" width="290" height="48"/>
-                                        <constraints>
-                                            <constraint firstAttribute="height" constant="48" id="6et-Qc-968"/>
-                                        </constraints>
-                                        <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                        <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                                        <textInputTraits key="textInputTraits" returnKeyType="done"/>
-                                        <userDefinedRuntimeAttributes>
-                                            <userDefinedRuntimeAttribute type="boolean" keyPath="autoScrollUp" value="YES"/>
-                                        </userDefinedRuntimeAttributes>
-                                    </textField>
                                     <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" minimumFontSize="17" background="img_input_round_bg_default" translatesAutoresizingMaskIntoConstraints="NO" id="JqR-OT-eWW" customClass="CustomTextField">
                                         <rect key="frame" x="15" y="251.5" width="290" height="48"/>
                                         <constraints>
@@ -874,10 +868,13 @@
                                         </constraints>
                                         <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                         <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                                        <textInputTraits key="textInputTraits" returnKeyType="done"/>
+                                        <textInputTraits key="textInputTraits" returnKeyType="done" secureTextEntry="YES"/>
                                         <userDefinedRuntimeAttributes>
                                             <userDefinedRuntimeAttribute type="boolean" keyPath="autoScrollUp" value="YES"/>
                                         </userDefinedRuntimeAttributes>
+                                        <connections>
+                                            <outlet property="delegate" destination="Rex-y2-nt8" id="Vvb-Ca-yBv"/>
+                                        </connections>
                                     </textField>
                                     <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Z6t-bj-3PL">
                                         <rect key="frame" x="15" y="143" width="290" height="14"/>
@@ -909,6 +906,21 @@
                                             <constraint firstAttribute="height" constant="19" id="YQH-S5-U6x"/>
                                         </constraints>
                                     </view>
+                                    <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" minimumFontSize="17" background="img_input_round_bg_default" translatesAutoresizingMaskIntoConstraints="NO" id="tkZ-kz-7ZX" customClass="CustomTextField">
+                                        <rect key="frame" x="15" y="95" width="290" height="48"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="48" id="6et-Qc-968"/>
+                                        </constraints>
+                                        <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                                        <textInputTraits key="textInputTraits" returnKeyType="next" secureTextEntry="YES"/>
+                                        <userDefinedRuntimeAttributes>
+                                            <userDefinedRuntimeAttribute type="boolean" keyPath="autoScrollUp" value="YES"/>
+                                        </userDefinedRuntimeAttributes>
+                                        <connections>
+                                            <outlet property="delegate" destination="Rex-y2-nt8" id="J9Z-WK-ZfP"/>
+                                        </connections>
+                                    </textField>
                                 </subviews>
                                 <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                                 <constraints>
@@ -989,6 +1001,9 @@
                                         <state key="normal" title="저장" backgroundImage="common_button_right_bg">
                                             <color key="titleColor" red="0.01176470588" green="0.60392156860000001" blue="0.87450980389999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                         </state>
+                                        <state key="disabled">
+                                            <color key="titleColor" red="0.79215686269999996" green="0.80784313730000001" blue="0.84705882349999995" alpha="1" colorSpace="calibratedRGB"/>
+                                        </state>
                                         <state key="highlighted" backgroundImage="common_button_right_bg_press"/>
                                         <userDefinedRuntimeAttributes>
                                             <userDefinedRuntimeAttribute type="color" keyPath="placeHolderColor">
@@ -996,7 +1011,7 @@
                                             </userDefinedRuntimeAttribute>
                                         </userDefinedRuntimeAttributes>
                                         <connections>
-                                            <action selector="btnSaveTouched:" destination="Rex-y2-nt8" eventType="touchUpInside" id="LOI-hy-7vl"/>
+                                            <action selector="btnSaveTouched:" destination="Rex-y2-nt8" eventType="touchUpInside" id="QZo-oX-zBd"/>
                                         </connections>
                                     </button>
                                 </subviews>
@@ -2632,7 +2647,7 @@
                 </viewController>
                 <placeholder placeholderIdentifier="IBFirstResponder" id="FfA-RP-U30" userLabel="First Responder" sceneMemberID="firstResponder"/>
             </objects>
-            <point key="canvasLocation" x="-2098.125" y="505.98591549295776"/>
+            <point key="canvasLocation" x="-2363" y="365"/>
         </scene>
         <!--Goodbye View Controller-->
         <scene sceneID="8yA-RM-Te6">
@@ -3026,10 +3041,13 @@
                                         </constraints>
                                         <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                         <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                                        <textInputTraits key="textInputTraits" returnKeyType="done"/>
+                                        <textInputTraits key="textInputTraits" returnKeyType="done" secureTextEntry="YES"/>
                                         <userDefinedRuntimeAttributes>
                                             <userDefinedRuntimeAttribute type="boolean" keyPath="autoScrollUp" value="YES"/>
                                         </userDefinedRuntimeAttributes>
+                                        <connections>
+                                            <outlet property="delegate" destination="H0x-o9-Ae3" id="dFR-mm-E5E"/>
+                                        </connections>
                                     </textField>
                                 </subviews>
                                 <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
@@ -3087,6 +3105,9 @@
                                         <state key="normal" title="다음" backgroundImage="common_button_right_bg">
                                             <color key="titleColor" red="0.01176470588" green="0.60392156860000001" blue="0.87450980389999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                         </state>
+                                        <state key="disabled">
+                                            <color key="titleColor" red="0.79215686269999996" green="0.80784313730000001" blue="0.84705882349999995" alpha="1" colorSpace="calibratedRGB"/>
+                                        </state>
                                         <state key="highlighted" backgroundImage="common_button_right_bg_press"/>
                                         <userDefinedRuntimeAttributes>
                                             <userDefinedRuntimeAttribute type="color" keyPath="placeHolderColor">
@@ -3149,7 +3170,7 @@
                 </viewController>
                 <placeholder placeholderIdentifier="IBFirstResponder" id="MxK-qr-Sh3" userLabel="First Responder" sceneMemberID="firstResponder"/>
             </objects>
-            <point key="canvasLocation" x="-581" y="225"/>
+            <point key="canvasLocation" x="-639" y="85"/>
         </scene>
     </scenes>
     <resources>
@@ -3174,7 +3195,7 @@
         <image name="img_btn_common2_disable" width="100" height="50"/>
         <image name="img_btn_common2_press" width="100" height="50"/>
         <image name="img_btn_common_active" width="100" height="50"/>
-        <image name="img_btn_common_disable" width="100" height="50"/>
+        <image name="img_btn_common_disable" width="10" height="10"/>
         <image name="img_btn_common_press" width="100" height="50"/>
         <image name="img_btn_round_bg" width="50" height="35"/>
         <image name="img_input_round_bg_default" width="50" height="35"/>

+ 4 - 3
OneCable/Classes/Definitions.h

@@ -59,10 +59,10 @@ static NSInteger kMaxTimeOut = 60;      //운영
 #define API_LANGUAGE_KEY        @"lang"
 
 //Network Constants
-#define API_ROOT_PATH       @"/ocs/v1"
+#define API_ROOT_PATH               @"/ocs/v1"
 
 //1 - 공통
-#define API_POST_APP_VERSION     @"/mobile_app/version"
+#define API_POST_APP_VERSION        @"/mobile_app/version"
 //#define API_GET_CODE_LIST   @"/getCodeList"
 
 #define API_GET_MOBILE                  @"/mobile_device/%@"
@@ -79,9 +79,10 @@ static NSInteger kMaxTimeOut = 60;      //운영
 #define API_TEMP_CUST_GROP_ID           @"1001"
 
 //#define API_POST_MEMBER_UPDATE          @"/member/%@/%@"        //회원정보 수정
-#define API_PUT_MEMBER_UPDATE          @"/customer/%@/group/%@/member/%@"        //회원정보 수정
+#define API_PUT_MEMBER_UPDATE           @"/customer/%@/group/%@/member/%@"        //회원정보 수정
 #define API_POST_AUTH_MAIL              @"/member/auth_mail"    //이메일 인증 재발송
 #define API_POST_RESET_PWD              @"/member/password"     //비밀번호 재설정
+#define API_POST_EXIST_PWD              @"/customer/%@/group/%@/member/%@/password/exist"  //비밀번호 확인
 #define API_GET_MOBILE_DEVICES          @"/member/devices"      //단말 목록
 #define API_POST_NEW_MOBILE_DEVICE      @"/member/new_mobile_device" //새 단말 인증
 #define API_POST_REPLACE_MOBILE_DEVICE  @"/member/replace_device"   //단말 교체

+ 13 - 6
OneCable/Classes/Model/LoginModel.m

@@ -151,14 +151,21 @@
     DeviceModel *result = nil;
     
     if (![self isMultiHomeHub]) {
-        
-        if (_selectedHomeHubID == nil || [_selectedHomeHubID isEmptyString]) {
-            for (DeviceModel *info in _deviceList) {
-                result = info;
-                break;
-            }
+
+        for (DeviceModel *info in _deviceList) {
+            result = info;
+            break;
         }
+        
+//        if (_selectedHomeHubID == nil || [_selectedHomeHubID isEmptyString]) {
+//            for (DeviceModel *info in _deviceList) {
+//                result = info;
+//                break;
+//            }
+//        }
+        
     } else {
+        
         for (DeviceModel *info in _deviceList) {
             if ([info.deviceId isEquestToIgnoreCase:_selectedHomeHubID]) {
                 result = info;

+ 4 - 4
OneCable/Classes/Util/ValidateUtil.m

@@ -59,13 +59,13 @@
 }
 
 + (BOOL)validateNickname:(NSString *)nickname {
-    if ([nickname length] > 20) {
-        [ValidateUtil alert:@"최대 20까지 입력할 수 있습니다"];
+    if ([nickname length] > 7) {
+        [ValidateUtil alert:@"최대 7까지 입력할 수 있습니다"];
         return NO;
     }
     
     //) 10 ~ 20Byte 이내 영문, 숫자, 영문과 숫자, 한글 조합
-    NSString *regEx = @"[A-Za-z0-9가-힣_]{1,20}$";
+    NSString *regEx = @"[A-Za-z0-9가-힣_]{1,7}$";
     NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regEx];
     
     return [pred evaluateWithObject:nickname];
@@ -272,7 +272,7 @@
         case ValidateTypeNickname:
             if ([ValidateUtil validateTextfiled:textfield type:ValidateTypeNull title:title]) {
                 if (!(isValid = [ValidateUtil validateNickname:textfield.text])) {
-                    NSString *message = [NSString stringWithFormat:NSLocalizedString(@"%@ 형식이 올바르지 않습니다\n다시 입력하세요\n닉네임에 공백은 사용할 수 없습니다\n20자 이내로 작성해 주세요", @"%@ 형식이 올바르지 않습니다\n다시 입력하세요\n닉네임에 공백은 사용할 수 없습니다\n20자 이내로 작성해 주세요"), title];
+                    NSString *message = [NSString stringWithFormat:NSLocalizedString(@"사용자 이름 설정 가이드를 다시 확인하세요.", @"사용자 이름 설정 가이드를 다시 확인하세요."), title];
                     [ValidateUtil alert:message];
                 }
             }

+ 13 - 5
OneCable/Classes/ViewControllers/HomeHubScreens/HomeHubViewController.m

@@ -12,7 +12,7 @@
 #import "CustomTableView.h"
 #import "CustomButton.h"
 #import "Reachability.h"
-
+#import "ChangeDeviceNamePopupView.h"
 
 //#import <LGBluetooth/LGBluetooth.h>
 
@@ -95,7 +95,7 @@
     }
 
     [[JDFacade facade].loginUser setHomeHubID:hubInfo.deviceId];
-
+    _lblTitle.text = hubInfo.deviceName;
 }
 
 
@@ -212,14 +212,22 @@
     [super tableView:tableView didSelectRowAtIndexPath:indexPath];
 }
 
+
+- (void)changeDeviceName:(NSString *)deviceName {
+    
+    _lblTitle.text = deviceName;
+}
+
+#pragma mark User Event
 - (IBAction)btnEditTitleTouched:(id)sender {
-    NSLog(@"타이틀 변경");
+    
+    ChangeDeviceNamePopupView *popup = [[ChangeDeviceNamePopupView alloc]initFromNib:[DeviceDetailModel new]];
+    popup.delegate = self;
+    [popup showChangeDevice:hubInfo];
 }
 
 - (void)btnSetTouched:(id)sender {
     
-    NSLog(@"bleState : %d", bleState) ;
-    
     if (bleState) {
         
         UIViewController *vc = [CommonUtil instantiateViewControllerWithIdentifier:@"HomeHubSearchViewController" storyboardName:@"HomeHub"];

+ 9 - 3
OneCable/Classes/ViewControllers/HomeHubScreens/HomeHubWifiPasswdInputViewController.m

@@ -172,7 +172,7 @@
     if (textField.text.length > 0) {
         
         [self.view endEditing:YES];
-        [self btnConnectTouched:nil];
+
     }
     
     return YES;
@@ -203,6 +203,13 @@
         
         [bleService readConnectionWiFiInfo];
     }
+    else if (value.length > 0 &&
+             EQUALS([value substringFromIndex:value.length-1], @"0")) {
+        
+        //실패
+        [self startLoading:NO];
+        [[JDFacade facade] alertTitle:@"인터넷 연결 설정 실패" message:@"인터넷 연결 설정에 실패하였습니다."];
+    }
 
 }
 
@@ -211,8 +218,7 @@
                                     result:(NSString *)result {
     
     NSLog(@"Connection Info Update!") ;
-    
-    
+
     if (EQUALS(kBLEChr, kBLEChrRdSSID)) {
         updateSSID = YES;
     }

+ 10 - 0
OneCable/Classes/ViewControllers/HomeHubScreens/HomeHubWifiSearchSuccessViewController.m

@@ -216,6 +216,7 @@
         if (EQUALS(selectedWLanModel.security, @"none")) {
             
             [self startLoading:YES];
+            [bleService setWiFiPwd:@""];
             [bleService enableDHCP];
             [bleService readAndNotifyCharacteristicUUID:kBLEChrStDHCPArg isNotify:NO];
             
@@ -253,6 +254,8 @@
 
 - (void)afterApplyNotifyConnect {
     
+    NSLog(@"\afterApplyNotifyConnect!");
+    
     [bleService readAndNotifyCharacteristicUUID:kBLEChrRdConInfo isNotify:YES];
 }
 
@@ -268,6 +271,13 @@
         
         [bleService readConnectionWiFiInfo];
     }
+    else if (value.length > 0 &&
+             EQUALS([value substringFromIndex:value.length-1], @"0")) {
+        
+        //실패
+        [self startLoading:NO];
+        [[JDFacade facade] alertTitle:@"인터넷 연결 설정 실패" message:@"인터넷 연결 설정에 실패하였습니다."];
+    }
 }
 
 //readConnectionWiFiInfo

+ 5 - 1
OneCable/Classes/ViewControllers/HomeMemberScreens/HomeMemberAddViewController.m

@@ -177,12 +177,16 @@
         quiz = [_txtDirectQuiz.text trim];
     }
     
+    
+    NSString *dateString = [_btnDate.dateString strReplace:@"/" replace:@""];
+    dateString = [dateString strReplace:@"-" replace:@""];
+
     //parameters
     NSDictionary *parameter = @{@"member_id": [JDFacade facade].loginUser.memberId,
                                 @"quiz": quiz,
                                 @"quiz_id": quizInfo.quizId,
                                 @"status_code": quizInfo.statusCode,
-                                @"answer": [_btnDate.dateString strReplace:@"/" replace:@""],
+                                @"answer": dateString,
                                 @"invitation_list": invitations};
 // [JDErrorModel class]
 //    NSString *path = [NSString stringWithFormat:API_POST_HOMEGROUP_MEMBER_INVITE];

+ 42 - 19
OneCable/Classes/ViewControllers/MainScreens/LoginViewController.m

@@ -62,6 +62,9 @@ ID / PW Input Box Text Color
 }
 
 - (void)initUI {
+    
+    _btnLogin.enabled = NO;
+    
     [self.btnLogin setBackgroundImage:[UIImage imageNamed:@"img_btn_common_active"] forState:UIControlStateNormal capInsets:UIEdgeInsetsMake(kfTopInset,kfRightInset,kfBottomInset,kfLeftInset)];
     
     [self.btnLogin setBackgroundImage:[UIImage imageNamed:@"img_btn_common_press"] forState:UIControlStateHighlighted capInsets:UIEdgeInsetsMake(kfTopInset,kfRightInset,kfBottomInset,kfLeftInset)];
@@ -125,10 +128,16 @@ ID / PW Input Box Text Color
 - (void)prepareViewDidLoad {
 
     [RequestHandler handler].authorization = nil;
-
-    _chkAutoLogin.checked = [[[JDFacade facade] objectForKeyFromUserDefaults:USDEF_APP_AUTO_LOGIN] boolValue];
-    _chkIdSave.checked = [[[JDFacade facade] objectForKeyFromUserDefaults:USDEF_APP_SAVE_ID] boolValue];
-    if (_chkAutoLogin.checked) {
+    
+    BOOL autoLogin = [[[JDFacade facade] objectForKeyFromUserDefaults:USDEF_APP_AUTO_LOGIN] boolValue];
+    BOOL idSave = [[[JDFacade facade] objectForKeyFromUserDefaults:USDEF_APP_SAVE_ID] boolValue];
+    
+    _chkAutoLogin.checked = [[JDFacade facade] objectForKeyFromUserDefaults:USDEF_APP_AUTO_LOGIN] != nil ? autoLogin : YES;
+    
+    _chkIdSave.checked = [[JDFacade facade] objectForKeyFromUserDefaults:USDEF_APP_SAVE_ID] != nil ? idSave : YES;
+    
+    
+    if (autoLogin) {
         [self requestAutoLogin];
 //        _txtEmail.text = [[JDFacade facade] objectForKeyFromKeychain:USDEF_SESSION_LOGIN_ID];
 //        _txtPasswd.text = [[JDFacade facade] objectForKeyFromKeychain:USDEF_SESSION_LOGIN_PWD];
@@ -136,7 +145,7 @@ ID / PW Input Box Text Color
 //        [self btnLogInTouched:_btnLogin];
     }
     
-    if (_chkIdSave.checked) {
+    if (idSave) {
         NSLog(@"Save ID : %@", [[JDFacade facade] objectForKeyFromKeychain:USDEF_SESSION_LOGIN_ID]);
         _txtEmail.text = [[JDFacade facade] objectForKeyFromKeychain:USDEF_SESSION_LOGIN_ID];
     }
@@ -247,6 +256,7 @@ ID / PW Input Box Text Color
         
         [[JDFacade facade] storeObjectToUserDefaults:@(_chkAutoLogin.checked) forKey:USDEF_APP_AUTO_LOGIN];
         [[JDFacade facade] storeObjectToUserDefaults:@(_chkIdSave.checked) forKey:USDEF_APP_SAVE_ID];
+        
         if (_chkAutoLogin.checked) {//자동로그인 설정 시, 인증 토큰 저장
             [[JDFacade facade] storeObjectToKeychain:loginInfo.memberId forKey:USDEF_SESSION_LOGIN_ID];
             [[JDFacade facade] storeObjectToKeychain:loginInfo.authToken forKey:USDEF_SESSION_AUTOTOKEN];
@@ -384,17 +394,17 @@ ID / PW Input Box Text Color
 
 #pragma mark - UI Events
 - (IBAction)btnLogInTouched:(id)sender {
-
-#ifdef DEBUG_MODE
-    if ([_txtEmail.text isEmptyString]) {
-        _txtEmail.text = @"asura77";//@"smiles1080";
-    }
-
-    if ([_txtPasswd.text isEmptyString]) {
-        _txtPasswd.text = @"12345678a";//@"12341234aa";
-
-    }
-#endif
+    
+//#ifdef DEBUG_MODE
+//    if ([_txtEmail.text isEmptyString]) {
+//        _txtEmail.text = @"asura77";//@"smiles1080";
+//    }
+//
+//    if ([_txtPasswd.text isEmptyString]) {
+//        _txtPasswd.text = @"12345678a";//@"12341234aa";
+//
+//    }
+//#endif
 
     // TODO : 아이디 형식 검사할것
 //    if (![ValidateUtil validateTextfiled:_txtEmail type:ValidateTypeEmail title:@"이메일" ]) {
@@ -417,7 +427,6 @@ ID / PW Input Box Text Color
 
     UIViewController *vc = [CommonUtil instantiateViewControllerWithIdentifier:@"SignUpTypeSelectViewController" storyboardName:@"SignUp"];
 
-
     UINavigationController *m_navi =[[UINavigationController alloc]initWithRootViewController:vc];
     
     [self presentViewController:m_navi animated:YES completion:nil];
@@ -468,6 +477,18 @@ ID / PW Input Box Text Color
     return YES;
 }
 
+- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
+    
+    NSString *text = [textField.text stringByReplacingCharactersInRange:range withString:string];
+    
+    NSString *userID = [textField isEqual:_txtEmail] ? text : _txtEmail.text;
+    NSString *userPW = [textField isEqual:_txtPasswd] ? text : _txtPasswd.text;
+    
+    _btnLogin.enabled = userID.length >= 6 && userPW.length >= 8;
+    
+    return YES;
+}
+
 //다음
 - (void)moveToNextField:(id)sender {
 
@@ -494,7 +515,8 @@ ID / PW Input Box Text Color
             }
             else
             {
-                [[JDFacade facade] toast:result.resultMsg];
+                //[[JDFacade facade] toast:result.resultMsg];
+                [[JDFacade facade] alertTitle:@"알림" message:result.resultMsg];
             }
             
             break;
@@ -511,7 +533,8 @@ ID / PW Input Box Text Color
             }
             else
             {
-                [[JDFacade facade] toast:result.resultMsg];
+                [[JDFacade facade] alertTitle:@"알림" message:result.resultMsg];
+//                [[JDFacade facade] toast:result.resultMsg];
             }
             
             break;

+ 2 - 0
OneCable/Classes/ViewControllers/MainScreens/ManagementViewController.h

@@ -15,7 +15,9 @@
 
 
 @property (weak, nonatomic) IBOutlet CustomImageView *imgvLogo;
+@property (weak, nonatomic) IBOutlet CustomImageView *imgNoticeCount;
 @property (weak, nonatomic) IBOutlet CustomLabel *lblNoticeCount;
+@property (weak, nonatomic) IBOutlet CustomImageView *imgPushCount;
 @property (weak, nonatomic) IBOutlet CustomLabel *lblPushCount;
 @property (weak, nonatomic) IBOutlet CustomImageView *imgvHomehubOff;
 @property (weak, nonatomic) IBOutlet CustomImageView * imgvSetAlert;

+ 6 - 13
OneCable/Classes/ViewControllers/MainScreens/ManagementViewController.m

@@ -213,7 +213,10 @@
 //extendView 컨텐츠 설정
 - (void)setContents {
     
-    NSLog(@"setcontent : %@", _dashboard);
+    NSLog(@"setcontent : %@",_dashboard);
+    
+    _imgNoticeCount.hidden = _lblNoticeCount.hidden = EQUALS(_dashboard.noticeCount, @"0");
+    _imgPushCount.hidden = _lblPushCount.hidden = EQUALS(_dashboard.pushCount, @"0");
     
     _lblNoticeCount.text = _dashboard.noticeCount;
     _lblPushCount.text = _dashboard.pushCount;
@@ -222,20 +225,10 @@
     
     //    _imgvHomehubOff.hidden = [JDFacade facade].loginUser.isHomehubOnline;
     
-    NSLog(@"deviceEventYn : %d", [_dashboard.deviceEventYn boolValue]);
-    NSLog(@"y : %d, n : %d", [@"Y" boolValue], [@"N" boolValue]);
     
-    if ([_dashboard.deviceEventYn boolValue]) {
-        _imgvHomehubOff.hidden = YES;
-    } else {
-        _imgvHomehubOff.hidden = NO;
-    }
+    _imgvHomehubOff.hidden = [_dashboard.deviceEventYn boolValue];
+    _imgvSetAlert.hidden = [_dashboard.phoneAuthYn boolValue];
     
-    if ([_dashboard.phoneAuthYn boolValue]) {
-        _imgvSetAlert.hidden = YES;
-    } else {
-        _imgvSetAlert.hidden = NO;
-    }
     
     //    _btnHomeHub.enabled = [JDFacade facade].loginUser.hasHomeHub;
     //    _btnHomeHub.alpha = _btnHomeHub.enabled ? 1.0f : 0.4f;

+ 1 - 0
OneCable/Classes/ViewControllers/MainScreens/NoticeViewController.m

@@ -232,6 +232,7 @@
     return cell;
 }
 
+
 #pragma mark - UI Events
 - (IBAction)btnCloseTouched:(id)sender {
     [self dismissViewControllerAnimated:YES completion:nil];

+ 37 - 2
OneCable/Classes/ViewControllers/SettingsScreens/SettingsPasswdInputViewController.m

@@ -8,6 +8,7 @@
 
 #import "SettingsPasswdInputViewController.h"
 #import "CustomTextField.h"
+#import "RequestHandler.h"
 
 @interface SettingsPasswdInputViewController ()<CustomTextFieldDelegate>
 
@@ -28,21 +29,25 @@
     
     _txtInputPasswd.returnKeyType = UIReturnKeyDone;
     _txtInputPasswd.delegate = self;
+    _btnNext.enabled = NO;
     
     [self.navigationController.navigationBar setHidden:YES];
     self.navigationController.interactivePopGestureRecognizer.enabled = NO;
 }
 
+
+#pragma mark - user event
 - (IBAction)btnNextTouched:(id)sender {
-    UIViewController *vc = [CommonUtil instantiateViewControllerWithIdentifier:@"SettingsPasswdSetViewController" storyboardName:@"Settings"];
     
-    [self.navigationController pushViewController:vc animated:YES];
+    [self requestExistPWD];
 }
 
 - (IBAction)btnCancelTouched:(id)sender {
     [[self navigationController] popToRootViewControllerAnimated:YES];
 }
 
+
+#pragma mark - textfield delegate
 - (BOOL)textFieldShouldReturn:(UITextField *)textField {
     if ([textField isEqual:_txtInputPasswd]) {
         [textField resignFirstResponder];
@@ -51,12 +56,42 @@
     
 }
 
+- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
+    
+    NSString *text = [textField.text stringByReplacingCharactersInRange:range withString:string];
+    
+    _btnNext.enabled = text.length >= 8;
+    
+    return YES;
+}
+
+
 - (void)didReceiveMemoryWarning {
     [super didReceiveMemoryWarning];
 
 }
 
 
+//비번 맞는지 확인
+- (void)requestExistPWD {
+    //parameters
+    NSDictionary *parameter = @{@"password": _txtInputPasswd.text.trim};
+    
+    NSString *path = [[JDFacade facade] getUrlWithCustGroupIDAndMemberID:API_POST_EXIST_PWD];
+    
+    [[RequestHandler handler] sendAsyncPostRequestAPIPath:path parameters:parameter modelClass:[JDJSONModel class] completion:^(id responseObject) {
+        
+        UIViewController *vc = [CommonUtil instantiateViewControllerWithIdentifier:@"SettingsPasswdSetViewController" storyboardName:@"Settings"];
+        
+        [self.navigationController pushViewController:vc animated:YES];
+        
+    } failure:^(id errorObject) {
+        JDErrorModel *error = (JDErrorModel *)errorObject;
+        [[JDFacade facade] alert:error.errorMessage];
+        
+    }];
+}
+
 
 
 @end

+ 47 - 4
OneCable/Classes/ViewControllers/SettingsScreens/SettingsPasswdSetViewController.m

@@ -10,6 +10,7 @@
 #import "CustomTextField.h"
 #import "CustomButton.h"
 #import "CustomLabel.h"
+#import "RequestHandler.h"
 
 @interface SettingsPasswdSetViewController () <CustomTextFieldDelegate>
 
@@ -27,32 +28,74 @@
     UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
     statusBar.backgroundColor = [UIColor whiteColor];
     
-    _txtInputPasswd.returnKeyType = UIReturnKeyDone;
-    _txtInputPasswd.delegate = self;
+    _btnSave.enabled = NO;
     
     [self.navigationController.navigationBar setHidden:YES];
     self.navigationController.interactivePopGestureRecognizer.enabled = NO;
 }
 
+#pragma mark - User Event
 - (IBAction)btnCancelTouched:(id)sender {
     [[self navigationController] popToRootViewControllerAnimated:YES];
 }
 
 - (IBAction)btnSaveTouched:(id)sender {
-        [[self navigationController] popToRootViewControllerAnimated:YES];
+    
+
+    [self requestChangePass];
 }
 
+
+#pragma mark - text field delegate
 - (BOOL)textFieldShouldReturn:(UITextField *)textField {
-    if ([textField isEqual:_txtInputPasswd]) {
+    
+    if ([textField isEqual:_txtInputRePasswd]) {
+        
         [textField resignFirstResponder];
     }
+    else {
+        
+        [_txtInputRePasswd becomeFirstResponder];
+    }
+    
     return YES;
     
 }
 
+- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
+    
+    NSString *text = [textField.text stringByReplacingCharactersInRange:range withString:string];
+    
+    _btnSave.enabled = text.length >= 8;
+    
+    return YES;
+}
+
 - (void)didReceiveMemoryWarning {
     [super didReceiveMemoryWarning];
 
 }
 
+
+//비번 바꾸기
+- (void)requestChangePass {
+    
+    //parameters
+    NSDictionary *parameter = @{@"type": @"password" ,
+                                @"password": _txtInputPasswd.text.trim};
+    
+    NSString *path = [[JDFacade facade] getUrlWithCustGroupIDAndMemberID:API_PUT_MEMBER_UPDATE];
+    
+    //NSLog(@"path : %@ ", path);
+    [[RequestHandler handler] sendAsyncPutRequestAPIPath:path parameters:parameter modelClass:[JDJSONModel class] completion:^(id responseObject) {
+        
+        [[self navigationController] popToRootViewControllerAnimated:YES];
+        
+        
+    } failure:^(id errorObject) {
+        JDErrorModel *error = (JDErrorModel *)errorObject;
+        [[JDFacade facade] alert:error.errorMessage];
+    }];
+}
+
 @end

+ 3 - 3
OneCable/Classes/ViewControllers/SettingsScreens/SettingsViewController.m

@@ -194,7 +194,7 @@
         if (response) {//API 성공
             
             if (!imageIsNull) {
-                [_btnProfile sd_setBackgroundImageWithURL:[NSURL URLWithString:response.imageFile] forState:UIControlStateNormal placeholderImage:nil options:SDWebImageRefreshCached];
+                [_btnProfile sd_setBackgroundImageWithURL:[NSURL URLWithString:response.imageFile] forState:UIControlStateNormal placeholderImage:[UIImage imageNamed:@"img_member_photo_default"] options:SDWebImageRefreshCached];
                 
                 [JDFacade facade].loginUser.profileImage = response.imageFile;
                 
@@ -203,7 +203,7 @@
                     NSString *msg = @"사진이 삭제 되었습니다.";
                     [[JDFacade facade] alertTitle:@"알림" message: msg completionHander:nil];
 
-                [_btnProfile sd_setBackgroundImageWithURL:[NSURL URLWithString:response.imageFile] forState:UIControlStateNormal placeholderImage:nil options:SDWebImageRefreshCached];
+                [_btnProfile sd_setBackgroundImageWithURL:[NSURL URLWithString:response.imageFile] forState:UIControlStateNormal placeholderImage:[UIImage imageNamed:@"img_member_photo_default"] options:SDWebImageRefreshCached];
                 
                 [JDFacade facade].loginUser.profileImage = response.imageFile;
             }
@@ -264,7 +264,7 @@
             _btnProfile = tcell.btnProfile;
         }
         
-        [_btnProfile sd_setBackgroundImageWithURL:[NSURL URLWithString:[JDFacade facade].loginUser.profileImage] forState:UIControlStateNormal placeholderImage:nil options:SDWebImageRefreshCached];
+        [_btnProfile sd_setBackgroundImageWithURL:[NSURL URLWithString:[JDFacade facade].loginUser.profileImage] forState:UIControlStateNormal placeholderImage:[UIImage imageNamed:@"img_member_photo_default"] options:SDWebImageRefreshCached];
         
         tcell.lblPhoneNum.text = [CommonUtil formattedPhoneNumber:[JDFacade facade].loginUser.phone];
         

+ 3 - 0
OneCable/Classes/ViewControllers/SignUpScreens/CertificationViewController.m

@@ -88,6 +88,7 @@
         
         // 마스터 회원가입일 경우 퀴즈 선택 메뉴로 이동
         if ([[JDFacade facade].signType isEqualToString:KNEET_MEMBER_MASTER]) {
+            
             SignUpQuizSetViewController *vc = [CommonUtil instantiateViewControllerWithIdentifier:@"SignUpQuizSetViewController" storyboardName:@"SignUp"];
             
             vc.signUpModel = signUpModel;
@@ -96,7 +97,9 @@
             
             [self.navigationController pushViewController:vc animated:YES];
             // 멤버 회원가입일 경우 퀴즈 정답 입력 메뉴로 이동
+            
         } else {
+            
             QuizViewController *vc = [CommonUtil instantiateViewControllerWithIdentifier:@"QuizViewController" storyboardName:@"SignUp"];
             
             vc.signUpModel = signUpModel;

+ 3 - 0
OneCable/Classes/ViewControllers/SignUpScreens/IDSetViewController.m

@@ -80,9 +80,12 @@
         _txtPwInput.enabled = _txtPwReInput.enabled = YES ;
         
     } failure:^(id errorObject) {
+        
         JDErrorModel *error = (JDErrorModel *)errorObject;
         [[JDFacade facade] alert:error.errorMessage];
         _lblMessageId.hidden = YES;
+        _txtIdInput.text = @"";
+
     }];
 }
 

+ 1 - 1
OneCable/Classes/ViewControllers/SignUpScreens/PwAnswerViewController.m

@@ -281,7 +281,7 @@
 - (void)requestFindPW {
     
     QuizModel *info = (QuizModel *)_selectedQuiz.value;
-    NSString *answer = [NSString stringWithFormat:@"%@%@%@", _txtYear.text, _txtMonth.text, _txtDay.text] ;
+    NSString *answer = [NSString stringWithFormat:@"%@-%@-%@", _txtYear.text, _txtMonth.text, _txtDay.text] ;
     
     NSString *path = [NSString stringWithFormat:API_POST_PW_FIND, _memberId];
     NSDictionary *parameter = @{@"phone" : _phoneNumber,

+ 1 - 0
OneCable/Classes/ViewControllers/SignUpScreens/PwFindViewController.m

@@ -45,6 +45,7 @@
     [self dismissViewControllerAnimated:YES completion:nil];
 }
 
+
 - (IBAction)btnNextTouched:(id)sender {
     
     PwAnswerViewController *vc = [CommonUtil instantiateViewControllerWithIdentifier:@"PwAnswerViewController" storyboardName:@"SignUp"];

+ 19 - 40
OneCable/Classes/ViewControllers/SignUpScreens/QuizViewController.m

@@ -51,8 +51,6 @@
     [self initTextField:_txtMonth placeholder:[CommonUtil currentMonth]];
     [self initTextField:_txtDay placeholder:[CommonUtil currentDay]];
     
-    _txtYear.inputAccessoryView = [self generateAccessoryView];
-    _txtMonth.inputAccessoryView = [self generateAccessoryView];
 
 }
 
@@ -158,51 +156,32 @@
     return YES;
 }
 
-// 키보드 출력 시 다음,닫기 버튼 추가
-- (UIView *)generateAccessoryView {
-    
-    CGFloat width = [UIScreen mainScreen].bounds.size.width;
-    _toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0, 0.0, width, 44.0)];
-    _toolBar.barStyle = UIBarStyleBlack;
-    _toolBar.translucent = YES;
-    
-    _barItems = [NSMutableArray new];
-    
-    _btnFlexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
-    
-    _btnKeyboardNext = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"다음", @"다음")
-                                                        style:UIBarButtonItemStylePlain
-                                                       target:self
-                                                       action:@selector(goNextField)];
-    
 
-    _btnKeyboardClose = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"닫기", @"닫기")
-                                                         style:UIBarButtonItemStylePlain
-                                                        target:self
-                                                        action:@selector(hideKeyboard)];
+#pragma mark - textfield delegate
+- (void)moveToPrevField:(id)sender {
     
-    _btnKeyboardClose.tintColor = [UIColor whiteColor];
-    _btnKeyboardNext.tintColor = [UIColor whiteColor];
+    UITextField *tf = sender;
+    NSInteger tag = tf.tag;
     
-    [_barItems addObject:_btnKeyboardClose];
-    [_barItems addObject:_btnFlexibleSpace];
-    [_barItems addObject:_btnKeyboardNext];
-    [_toolBar setItems:_barItems animated:YES];
+    if ( ![tf isEqual:_txtYear] ) {
+        
+        UITextField *prevTf = [self.view viewWithTag:tag - 1] ;
+        [prevTf becomeFirstResponder] ;
+        
+    }
     
-    return _toolBar;
 }
 
-// 키보드에서 다음버튼 터치시 이동 설정
-- (void)goNextField {
-
-    if ([_txtYear isEditing]) {
-        [_txtMonth becomeFirstResponder];
-        return;
-    }
+- (void)moveToNextField:(id)sender {
     
-    if ([_txtMonth isEditing]) {
-        [_txtDay becomeFirstResponder];
-        return;
+    UITextField *tf = sender;
+    NSInteger tag = tf.tag;
+    
+    if ( ![tf isEqual:_txtDay] ) {
+        
+        UITextField *prevTf = [self.view viewWithTag:tag + 1] ;
+        [prevTf becomeFirstResponder] ;
+        
     }
 }
 

+ 8 - 0
OneCable/Classes/ViewControllers/SignUpScreens/UserNameSetViewController.m

@@ -11,6 +11,7 @@
 #import "CustomTextField.h"
 #import "RequestHandler.h"
 #import "JoinFinishViewController.h"
+#import "ValidateUtil.h"
 
 @interface UserNameSetViewController () <CustomTextFieldDelegate> {
     
@@ -63,6 +64,7 @@
         [self.navigationController pushViewController:vc animated:YES];
         
     } failure:^(id errorObject) {
+        
         JDErrorModel *error = (JDErrorModel *)errorObject;
         [[JDFacade facade] alert:error.errorMessage];
     }];
@@ -70,6 +72,12 @@
 
 // 다음 버튼 터치시 사용자가 입력한 닉네임 변경
 - (IBAction)btnNextTouched:(id)sender {
+    
+    if (_txtNickInput.text.trim.length != 0 && ![ValidateUtil validateTextfiled:_txtNickInput
+                                    type:ValidateTypeNickname
+                                   title:NSLocalizedString(@"이름", @"이름")])
+        return;
+    
     [self requestChangeNickname];
 }
 

+ 4 - 1
OneCable/Classes/ViewControllers/ThingsScreens/ChangeDeviceNamePopupView.h

@@ -17,14 +17,17 @@
 
 @class CustomTextField;
 @class DeviceDetailModel;
+@class DeviceModel;
 
 @interface ChangeDeviceNamePopupView : CustomAlertView
 
+@property (strong, nonatomic) DeviceModel *deviceModel;
 @property (strong , nonatomic) DeviceDetailModel *deviceDetailModel;
-
 @property (weak, nonatomic) IBOutlet CustomTextField *txtInputDeviceName;  // 장치 이름
 
 - (id)initFromNib:(DeviceDetailModel*)detailModel;
+- (void)showChangeDevice:(DeviceModel*)deviceModel;
+
 @property(weak, nonatomic) id <changeDeviceNameDelegate> delegate;
 
 @end

+ 55 - 16
OneCable/Classes/ViewControllers/ThingsScreens/ChangeDeviceNamePopupView.m

@@ -18,6 +18,8 @@
 @interface ChangeDeviceNamePopupView () <CustomTextFieldDelegate>
 {
     
+    BOOL changeDevicePopup;
+    
 }
 
 @end
@@ -26,16 +28,17 @@
 
 
 - (id)initFromNib:(DeviceDetailModel*)detailModel{
-
+    
     for (UIView *view in [CommonUtil nibViews:@"ChangeDeviceNamePopupView"]) {
         if ([view isKindOfClass:[ChangeDeviceNamePopupView class]]) {
+            
             self = (ChangeDeviceNamePopupView *)view;
             self.deviceDetailModel = detailModel;
             
             //XIB의 경우, 현재 화면 사이즈로 맞춰줘야 함.
             self.frame = [UIScreen mainScreen].bounds;
             self.lblTitle.text = NSLocalizedString(@"이름 변경", @"이름 변경");
-
+            
             NSString * prdName = [_deviceDetailModel.prdName stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
             NSString * prdUserName = [_deviceDetailModel.prdUserName stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
             
@@ -62,38 +65,74 @@
             //Localization
             [self.btnConfirm setTitle:NSLocalizedString(@"확인", @"확인") forState:UIControlStateNormal];
             [self.btnCancel setTitle:NSLocalizedString(@"취소", @"취소") forState:UIControlStateNormal];
+            
+            changeDevicePopup = NO;
         }
     }
     
     return self;
 }
 
+- (void)showChangeDevice:(DeviceModel*)deviceModel{
+    
+    [super show];
+    
+    _deviceModel = deviceModel;
+    changeDevicePopup = YES;
+    
+    self.lblTitle.text = NSLocalizedString(@"홈허브 이름 설정", @"홈허브 이름 설정");
+    
+    _txtInputDeviceName.placeholder = _deviceModel.deviceName;
+    
+    [self.btnConfirm setTitle:NSLocalizedString(@"저장", @"저장") forState:UIControlStateNormal];
+    [self.btnCancel setTitle:NSLocalizedString(@"취소", @"취소") forState:UIControlStateNormal];
+
+}
+
 - (void)didMoveToSuperview {
     if (!self.superview) {
         return;
     }
-//    _txtNickname.customTextFieldSuperview = CustomTextFieldSuperviewIsPopupContentView;
+    //    _txtNickname.customTextFieldSuperview = CustomTextFieldSuperviewIsPopupContentView;
 }
 
 #pragma mark - UI Events
 - (IBAction)btnConfirmTouched:(id)sender {
-
-        [self requestDeviceChangeName];
-        [self.delegate changeDeviceName:_txtInputDeviceName.text];
-        [super btnCancelTouched:nil];
-
+    
+    NSString *nodeName = [_txtInputDeviceName.text isEqualToString:@""] ? _deviceDetailModel.prdName : _txtInputDeviceName.text.trim;
+    
+    
+    [self requestDeviceChangeName:changeDevicePopup];
+    [self.delegate changeDeviceName:changeDevicePopup ? _txtInputDeviceName.text.trim : nodeName];
+    [super btnCancelTouched:nil];
+    
 }
 
-- (void) requestDeviceChangeName {
-
-    NSDictionary *parameter = @{@"device_id": _deviceDetailModel.deviceId,
-                                @"node_id" : _deviceDetailModel.nodeId,
-                                @"prd_user_name" : [_txtInputDeviceName.text isEqualToString:@""] ? _deviceDetailModel.prdName : _txtInputDeviceName.text};
+- (void) requestDeviceChangeName:(BOOL)isDevice {
+    
+    NSDictionary *parameters;
+    
+    if (isDevice) {
+        parameters = @{@"device_id": _deviceModel.deviceId,
+                       @"prd_user_name" : _txtInputDeviceName.text.trim};
+    }
+    else {
+        
+        NSString *nodeName = [_txtInputDeviceName.text isEqualToString:@""] ? _deviceDetailModel.prdName : _txtInputDeviceName.text.trim;
+        
+        parameters =  @{@"device_id": _deviceDetailModel.deviceId,
+                        @"node_id" : _deviceDetailModel.nodeId,
+                        @"prd_user_name" : nodeName};
+    }
+    
     
     NSString *path = [[JDFacade facade] getUrlWithCustAndGroupID:API_PUT_DEVICE_INFO arguments:nil];
     
-    [[RequestHandler handler] sendAsyncPutRequestAPIPath:path parameters:parameter modelClass:[JDJSONModel class] completion:^(id responseObject) {
-
+    [[RequestHandler handler] sendAsyncPutRequestAPIPath:path
+                                              parameters:parameters
+                                              modelClass:[JDJSONModel class]
+                                              completion:^(id responseObject) {
+        
         
     } failure:^(id errorObject) {
         JDErrorModel *error = (JDErrorModel *)errorObject;
@@ -102,8 +141,8 @@
 }
 
 #pragma mark - CustomTextField
-
 - (BOOL)textFieldShouldReturn:(UITextField *)textField {
+    
     if ([textField isEqual:_txtInputDeviceName]) {
         [self btnConfirmTouched:nil];
     }

+ 0 - 4
OneCable/Classes/ViewControllers/ThingsScreens/ThingsAddCompleteViewController.m

@@ -58,9 +58,6 @@
     
 }
 
-#pragma mark - Main Logic
-
-
 
 #pragma mark - UI Events
 
@@ -82,7 +79,6 @@
 
 -(void)receiveSocketData:(NSNotification *)notification
 {
-    
     _btnChange.enabled = YES;
     
     deviceDetailModel = [[DeviceDetailModel alloc] initWithDictionary:notification.object error:nil];

+ 10 - 2
OneCable/Classes/ViewControllers/ThingsScreens/ThingsViewController.m

@@ -631,23 +631,31 @@
 
 - (void)updateTitle {
     
+    NSLog(@"_selectHub : %@", _selectHub);
+    
     _imgvArrow.hidden = ![[JDFacade facade].loginUser isMultiHomeHub];
     [self setTitleClickable:[[JDFacade facade].loginUser isMultiHomeHub]];
     
     if (_imgvArrow.hidden) {
+        
         DeviceModel *info = [[JDFacade facade].loginUser getHomeHub];
-        _lblTitle.text = [NSString stringWithFormat:@"%@", info.deviceName];
+        NSLog(@"info : %@", info);
+        _lblTitle.text = [NSString stringWithFormat:@"%@", info.deviceName == nil ? @"" :  info.deviceName];
+        
     } else {
+        
         if (_selectHub == nil) {
             _lblTitle.text = @"전체";
         } else {
-            _lblTitle.text = [NSString stringWithFormat:@"%@", _selectHub.deviceName];
+            _lblTitle.text = [NSString stringWithFormat:@"%@", _selectHub.deviceName == nil ? @"" : _selectHub.deviceName];
         }
     }
     
     
     _lblCount.text = [NSString stringWithFormat:@"%zd", _deviceList.count];
+    
     NSLog(@"HomeHubID : %@", [JDFacade facade].loginUser.homehubDeviceId);
+    
     if (![JDFacade facade].loginUser.hasHomeHub) {//홈허브 아이디가 없는 경우,
         [_mainView bringSubviewToFront:_addHubContainerView];
         _addHubContainerView.hidden = NO;