CertificationViewController.m 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. //
  2. // CertificationViewController.m
  3. // OneCable
  4. //
  5. // Created by nComz on 2017. 3. 17..
  6. // Copyright © 2017년 ntels. All rights reserved.
  7. //
  8. #import "CertificationViewController.h"
  9. #import "CustomButton.h"
  10. #import "CustomTextField.h"
  11. #import "RequestHandler.h"
  12. #import "SignUpQuizSetViewController.h"
  13. #import "QuizViewController.h"
  14. #define kiZeroHeight 0;
  15. #define kiViewHeight 14; // 전송 버튼 위 여백뷰 높이 값
  16. #define kiBtnSendHeight 50; // 전송 버튼 높이 값
  17. #define ksSimpleSignUp @"2"; // 일반 회원가입
  18. #define ksMasterSignUP @"3"; // 마스터 회원가입
  19. @interface CertificationViewController () <CustomTextFieldDelegate>{
  20. NSString *signType;
  21. BOOL certificate;
  22. BOOL isMaster;
  23. }
  24. @end
  25. @implementation CertificationViewController
  26. - (void)viewDidLoad {
  27. [super viewDidLoad];
  28. [self initUI];
  29. }
  30. // UI 설정
  31. - (void)initUI {
  32. [self.navigationController.navigationBar setHidden:YES];
  33. self.navigationController.interactivePopGestureRecognizer.enabled = NO;
  34. certificate = NO;
  35. _btnSend.enabled = _btnNext.enabled = NO;
  36. [_lblStep setColor:kUITextColor03 text:[NSString stringWithFormat:@"%@", @"/ 5"]];
  37. [self initTextField:_txtPhoneNum];
  38. [self initTextField:_txtCertifyInput];
  39. [self.btnSend setBackgroundImage:[UIImage imageNamed:@"img_btn_common_active"] forState:UIControlStateNormal capInsets:UIEdgeInsetsMake(kfTopInset,kfRightInset,kfBottomInset,kfLeftInset)];
  40. [self.btnSend setBackgroundImage:[UIImage imageNamed:@"img_btn_common_press"] forState:UIControlStateHighlighted capInsets:UIEdgeInsetsMake(kfTopInset,kfRightInset,kfBottomInset,kfLeftInset)];
  41. [self.btnSend setBackgroundImage:[UIImage imageNamed:@"img_btn_common_disable"] forState:UIControlStateDisabled capInsets:UIEdgeInsetsMake(kfTopInset,kfRightInset,kfBottomInset,kfLeftInset)];
  42. // 마스터,멤버 여부에 따라 전송 버튼 Hidden 여부설정
  43. isMaster = [[JDFacade facade].signType isEqualToString:KNEET_MEMBER_MASTER] ;
  44. [self hiddenSendButton:isMaster];
  45. }
  46. - (void)initTextField:(UITextField*)textFiled {
  47. textFiled.returnKeyType = UIReturnKeyDone;
  48. textFiled.keyboardType = UIKeyboardTypeNumberPad;
  49. textFiled.delegate = self;
  50. }
  51. // 휴대폰 번호 인증 확인 요청
  52. - (void)requestValidNum {
  53. NSDictionary *parameter = @{@"phone": _txtPhoneNum.text,
  54. @"auth_number" : _txtCertifyInput.text,
  55. @"send_type" : @"U",
  56. @"auth_type" : signType};
  57. NSString *path = API_POST_RESPONSE_AUTH_NUM;
  58. [[RequestHandler handler] sendAsyncPostRequestAPIPath:path parameters:parameter modelClass:[SignUpModel class] completion:^(id responseObject) {
  59. SignUpModel *signUpModel = (SignUpModel *)responseObject;
  60. //NSLog(@"Response : %@",signUpModel);
  61. // 마스터 회원가입일 경우 퀴즈 선택 메뉴로 이동
  62. if ([[JDFacade facade].signType isEqualToString:KNEET_MEMBER_MASTER]) {
  63. SignUpQuizSetViewController *vc = [CommonUtil instantiateViewControllerWithIdentifier:@"SignUpQuizSetViewController" storyboardName:@"SignUp"];
  64. vc.signUpModel = signUpModel;
  65. vc.phoneNum = _txtPhoneNum.text;
  66. [JDFacade facade].signUpUser = signUpModel;
  67. [self.navigationController pushViewController:vc animated:YES];
  68. // 멤버 회원가입일 경우 퀴즈 정답 입력 메뉴로 이동
  69. } else {
  70. QuizViewController *vc = [CommonUtil instantiateViewControllerWithIdentifier:@"QuizViewController" storyboardName:@"SignUp"];
  71. vc.signUpModel = signUpModel;
  72. vc.phoneNum = _txtPhoneNum.text;
  73. [JDFacade facade].signUpUser = signUpModel;
  74. [self.navigationController pushViewController:vc animated:YES];
  75. }
  76. } failure:^(id errorObject) {
  77. JDErrorModel *error = (JDErrorModel *)errorObject;
  78. [[JDFacade facade] alert:error.errorMessage];
  79. }];
  80. }
  81. // 인증번호 전송 ( 멤버 회원가입만 해당 )
  82. - (void)requestAuthSendNum {
  83. //parameters
  84. NSDictionary *parameter = @{@"phone": _txtPhoneNum.text,
  85. @"auth_type": signType};
  86. NSString *path = API_POST_REQUEST_AUTH_NUM;
  87. [[RequestHandler handler] sendAsyncPostRequestAPIPath:path parameters:parameter modelClass:[JDJSONModel class] completion:^(id responseObject) {
  88. certificate = YES;
  89. _lblMessage.text = @"인증번호는 전송 후 3분 동안 유효 합니다";
  90. [_btnSend setTitle: @"인증번호 재전송" forState : UIControlStateNormal];
  91. } failure:^(id errorObject) {
  92. JDErrorModel *error = (JDErrorModel *)errorObject;
  93. [[JDFacade facade] alert:error.errorMessage];
  94. _lblMessage.text = error.errorMessage;
  95. }];
  96. }
  97. // 인증번호 전송 여부 설정
  98. - (void)hiddenSendButton:(BOOL)isHidden{
  99. if (isHidden) {
  100. _btnSend.hidden = YES;
  101. _btnSendHeight.constant = kiZeroHeight; // 버튼 높이 값 0 설정
  102. _viewHeight.constant = kiZeroHeight; // 뷰 높이 값 0 설정
  103. _lblMessage.text = @"설치기사님에게 인증번호 SMS를 받은 번호만\n인증이 가능합니다.";
  104. signType = ksMasterSignUP; // 인증 타입 마스터로 설정
  105. } else {
  106. _btnSend.hidden = NO;
  107. _btnSendHeight.constant = kiBtnSendHeight; // 버튼 높이 값 50 설정
  108. _viewHeight.constant = kiViewHeight; // 뷰 높이 값 14 설정
  109. _lblMessage.text = @"마스터 사용자에게 초대 SMS를 받은 번호만\n인증이 가능합니다.";
  110. signType = ksSimpleSignUp; // 인증 타입 멤버로 설정
  111. // _txtPhoneNum.hasMoveButton = _txtCertifyInput.hasMoveButton = NO;
  112. //
  113. // [_txtPhoneNum refreshAccessoryView];
  114. // [_txtCertifyInput refreshAccessoryView];
  115. }
  116. }
  117. // 다음 버튼 터치시 인증번호 유효성 체크
  118. - (IBAction)btnNextTouched:(id)sender {
  119. [self requestValidNum];
  120. }
  121. // 메뉴 닫기
  122. - (IBAction)btnCancelTouched:(id)sender {
  123. [self dismissViewControllerAnimated:YES completion:nil];
  124. }
  125. // 인증 번호 전송 버튼 터치시 입력 된 휴대폰 번호로 인증번호 전송
  126. - (IBAction)btnSendTouched:(id)sender {
  127. [self requestAuthSendNum];
  128. }
  129. #pragma mark - textfield delegate
  130. // 휴대폰 번호 및 인증번호에 입력 된 글자 수에따라 다음 버튼 Enable여부 설정
  131. - (void)textFieldDidEndEditing:(UITextField *)textField{
  132. // 휴대폰 번호가 10자리 이상 입력 된 경우 다음 버튼 활성화
  133. // BOOL enabledPhoneNumber = _txtPhoneNum.text.length >= 10;
  134. // _btnSend.enabled = enabledPhoneNumber;
  135. // _btnNext.enabled = enabledPhoneNumber;
  136. //
  137. //
  138. // 인증번호가 4자리가 입력 된 경우 다음 버튼 활성화
  139. _btnNext.enabled = isMaster
  140. ? _txtPhoneNum.text.length >= 10 && _txtCertifyInput.text.length >= 4
  141. : certificate && _txtCertifyInput.text.length >= 4 ;
  142. }
  143. // 휴대폰 번호 및 인증번호 최대 입력가능한 텍스트 설정
  144. - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
  145. NSString *text = [textField.text stringByReplacingCharactersInRange:range withString:string];
  146. if ([textField isEqual:_txtPhoneNum]) {
  147. _btnSend.enabled = text.length >= 10;
  148. certificate = NO;
  149. }
  150. // 휴대폰 번호입력 최대 11글자
  151. if ([textField isEqual:_txtPhoneNum] && text.length > 11) {
  152. return NO;
  153. // 인증번호 최대 4글자
  154. } else if([textField isEqual:_txtCertifyInput] && text.length > 4){
  155. return NO;
  156. }
  157. return YES;
  158. }
  159. //일반 회원일때
  160. - (BOOL)textFieldShouldReturn:(UITextField *)textField {
  161. if ([textField isEqual:_txtPhoneNum]) {
  162. [_txtCertifyInput becomeFirstResponder];
  163. }
  164. else {
  165. [_txtPhoneNum becomeFirstResponder];
  166. }
  167. return YES ;
  168. }
  169. //마스터 회원일때
  170. - (void)moveToNextField:(id)sender {
  171. [_txtCertifyInput becomeFirstResponder];
  172. }
  173. - (void)moveToPrevField:(id)sender {
  174. [_txtPhoneNum becomeFirstResponder];
  175. }
  176. - (void)didReceiveMemoryWarning {
  177. [super didReceiveMemoryWarning];
  178. }
  179. @end