CertificationViewController.m 8.5 KB

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