iOS 개발 튜 토리 얼 로그 인과 방문객 의 논리 적 실현

자기 혁명―문 제 를 발견 하 다.
개발 과정 에서 앱 의 미등 록 사용 자 는 일부 기능(방문객 보기)을 사용 할 수 있 고 일부 핵심 기능 을 사용 하거나 개성 화 되 고 차별 화 된 서 비 스 를 받 으 려 면 사용자 로그 인(로그 인 맞 춤 형)이 필요 하 다.일반적인 상황 은:
사용자 가 어떤 단 추 를 누 르 면 팝 업 로그 인 인터페이스―>정 보 를 입력 합 니 다.  ――> 로그 인 인증  ――> 인터페이스 변화
몇 년 전에 개발 을 했 을 때 프로젝트 가 신속하게 출시 되 어야 하기 때문에 생각 할 겨를 이 없 었 다.(사실은 자신 이 너무 못 하 다)로그 인 을 판단 해 야 하 는 인터페이스 코드 에 다음 과 같은 코드 를 직접 적 었 다.

BOOL isLogin;
if(self.isLogin){
 //        

}
else{
 //      
 //               
 //                  
 
}
시간 이 지나 면 코드 가 많 으 면 위 와 같은 중복 코드 가 많은 화면 을 발견 할 수 있 습 니 다.이것 은 Do not repeat yourself 의 원칙 에 어 긋 나 고 뛰 는 논리 가 귀 찮 습 니 다.그래서 코드 를 개선 하기 시 작 했 습 니 다.
가장 먼저 친구 의 방법 은 로그 인 필드 를 상수 로 추출 하 는 것 입 니 다.필요 할 때 이 값 이 진짜 인지 아 닌 지 를 판단 한 다음 에 해당 하 는 논 리 를 실행 하면 각 클래스 에서 필드 를 절약 할 수 있 습 니 다.

if(CONSTANT.isLogin){
 //        

}
else{
 //      
 //               
 //                  
 
}
논리 가 증가 함 에 따라 공용 코드 가 점점 많아 지 는 것 을 발견 하여 부모 클래스 를 추출 하 였 습 니 다.그러면 논 리 는 부모 클래스 로 올 라 갑 니 다.모든 하위 클래스 는 isLogin 과 유사 한 속성 으로 사용자 의 로그 인 여 부 를 판단 할 필요 가 없습니다.

if(self.isLogin){
 //        

}
else{
 //      
 //               
 //                  
 
}
어느 날,우 리 는 일부 App 방문객 의 보기 싱크로 율 이 매우 크다 는 것 을 알 게 되 었 습 니 다.일부 App 의 로그 인 인터페이스 도 똑 같 습 니 다.그래서 위의 코드 가 간소화 되 어야 한 다 는 것 을 알 게 되 었 습 니 다.그래서 우 리 는 위의 else 부분 도 부모 클래스 로 옮 겼 습 니 다.즉,부모 클래스 에서 사용자 의 로그 인 여 부 를 판단 하고 로그 인하 지 않 으 면 방문객 의 보 기 를 표시 합 니 다.또한 사용자 의 로그 인 여부 필드 isLogin 을 전문 사용자 모델 에서 추출 합 니 다.
돌 을 더 듬 어 강 을 건너다―문 제 를 해결 하 다.
메 인 인터페이스 구 조 는 다음 과 같다.

UITabBarController 에 UINavigationController.png 포함
처음에 들 어 갈 때 모두 방문객 인터페이스 가 표시 되 고 색깔 은 파란색 이 며 중간+팝 업 로그 인 인터페이스 를 클릭 하고 로그 인 인터페이스의+를 클릭 하여 로그 인 과정 을 표시 한 다음 에 메 인 화면 에 로그 인 후의 각 화면 을 표시 하고 서로 다른 색 으로 대체 합 니 다.아래 그림 과 같 습 니 다.

로그 인 및 방문객.gif
실현 방법
메 인 인터페이스의 구축 코드 는 여기에 붙 이지 않 습 니 다.간단 합 니 다.주로 로그 인과 방문객 의 논리 적 실현 을 설명 합 니 다.
1.부모 클래스 보기 컨트롤 러

@interface BaseViewController : UIViewController
@property (nonatomic, assign) BOOL isLogin;
@end

@implementation BaseViewController
-(void)loadView{
 //UserModel        
 self.isLogin = [UserModel shareInstance].isLogin;
 //  isLogin                               
 //             viewDidLoad         
 //            window rootViewController         
 self.isLogin ? [super loadView] : [self setupVisitorView];
 
}

-(void)setupVisitorView{ 
 UIView *view = [[UIView alloc]initWithFrame:[UIScreen mainScreen].bounds]; 
 view.backgroundColor = [UIColor cyanColor];
 self.view = view; 
}
@end
2.하위 클래스 보기 컨트롤 러(네 개의 하위 클래스 모두 차이 가 많 지 않 습 니 다.여기에 하 나 를 붙 입 니 다)

@implementation FourViewController

- (void)viewDidLoad {
 [super viewDidLoad];
 
 if (self.isLogin) {
  self.view.backgroundColor = [UIColor purpleColor];
 }
}

@end
3.중간 보기 컨트롤 러

@implementation CenterViewController

- (void)viewDidLoad {
 [super viewDidLoad];
 self.view.backgroundColor = [UIColor whiteColor];
 UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
 [btn setImage:[UIImage imageNamed:@"plusX_Last"] forState:UIControlStateNormal];
 btn.bounds = CGRectMake(0, 0, 64, 64);
 btn.center = self.view.center;
 [self.view addSubview:btn];
 if (!self.isLogin) {
  self.title = @"   ";
  [btn addTarget:self action:@selector(login) forControlEvents:UIControlEventTouchUpInside];
 }
 else{
  self.title = @"   ";
  [btn addTarget:self action:@selector(close) forControlEvents:UIControlEventTouchUpInside];
 }
}

-(void)login{
 [UserModel shareInstance].isLogin = YES;
 //          rootViewController
 [self dismissViewControllerAnimated:YES completion:^{
  [UIApplication sharedApplication].keyWindow.rootViewController = [[YFTabbarController alloc]init];
 }];
}

-(void)close{
 [self dismissViewControllerAnimated:YES completion:nil];
 
}

@end
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기