runtime 을 사용 하여 weex 가 원생 페이지 로 이동 합 니 다.

약술 하 다
최근 프로젝트 팀 은 weex 를 도입 할 계획 이 며,한 페이지 를 선정 하여 시험 수 를 진행 할 계획 이다.페이지 는 매우 간단 합 니 다.주로 데이터 렌 더 링 페이지 를 가 져 오고 지정 한 페이지 로 이동 할 수 있 습 니 다.이전에 RN 을 사 용 했 던 것 에 비해 weex 는 확실히 매우 간단 하 다.아래 그림 에서 볼 수 있 듯 이 weex 페이지 는 원생 페이지 로 넘 어가 야 하고 어느 페이지 로 넘 어가 야 하 는 지 우 리 는 죽 을 수 없습니다.즉,네 이 티 브 페이지 이전 프로젝트 에 적 혀 있 으 면 이론 적 으로 weex 를 사용 하면 임의로 호출 할 수 있다 는 것 이다.그럼 문제 가 생 겼 습 니 다.제 원래 페이지 는 이름 만 알 고 있 을 수도 있 습 니 다.제 가 어떻게 그 페이지 에 값 을 전달 합 니까?예 를 들 어 페이지 orderDetailVC 가 있 습 니 다.  ,이동 할 때 orderId,즉 orderDetailVC.orderId=@"123"을 입력 해 야 합 니 다.

사고
아마도 가장 직접적인 생각 은 바로 원생 이 weex 에 게 하나의 방법 을 제공 하여 weex 가 orderId 에 들 어가 게 한 다음 에 push 를 하 는 것 일 것 이다.하지만 내일 다른 페이지 로 넘 어가 야 한다 면 merchant DetailVC 는?그것 에 필요 한 것 은 orderId 가 아 닙 니 다.아마도 merchantId 일 것 입 니 다.심지어 더 많은 인자 일 것 입 니 다.그럼 어떻게 하면 임의의 점프 를 실현 할 수 있 습 니까?제 생각 은 프로젝트 는 제 가 쓴 것 입 니 다.어떤 종류 로 넘 어가 야 하 는 지 잘 알 고 있 습 니 다.그리고 이런 종류 에 어떤 인자 가 필요 한 지 저도 잘 알 고 있 습 니 다.다만 나 는 weex 로 그 인 자 를 어떻게 전달 해 야 할 지 모 를 뿐이다.만약 에 유형 명 을 알 게 된다 면 나 는 이런 종 류 를 알 게 되 었 다 는 것 을 의미한다.나 는 이런 종류 가 어떤 속성 이 있 는 지 알 게 될 것 이다.이런 종류의 모든 속성 을 나 는 모두 얻 을 수 있다.단지 어떤 것 은 내 가 그것 에 값 을 부여 해 야 하고 어떤 것 은 처리 할 필요 가 없다.
실현
전체적인 사고방식 은 원생 이 weex 에 통용 되 는 점프 방법 을 제공 하 는 것 이다.매개 변 수 는 클래스 이름과 속성 사전 입 니 다.

//     
/*
 vcName:     
 param:      (            id,     ,       ,key              。
 */
-(void)pushViewController:(NSString *)vcName param:(NSDictionary *)param;
/*
  APP        pop
 */
-(void)popViewController;
/*
 vcName:     
 param:      (            id,     ,       ,key              。
 */
-(void)presentViewController:(NSString *)vcName param:(NSDictionary *)param finish:(WXModuleCallback)callback;
/*
  APP        dismiss
 */
-(void)dismissViewController:(WXModuleCallback)callback;
 방법 을 제공 한 후 weex 는 이렇게 호출 할 수 있 습 니 다:

방안 을 확정 한 후에 남 은 유일한 일 은 weex 에 제공 하 는 방법 을 어떻게 실현 하 느 냐 하 는 것 이다.코드 는 다음 과 같 습 니 다:

-(void)pushViewController:(NSString *)vcName param:(NSDictionary *)param{
  //   
  Class vcClass = NSClassFromString(vcName);
  if (vcClass == nil) {
    return;
  }
  BaseViewController *vc = [[vcClass alloc] init];
  vc.hidesBottomBarWhenPushed = YES;
  //    
  unsigned int count = 0;
  //      
  objc_property_t *plist = class_copyPropertyList(vcClass, &count);
  for (int i = 0; i<count; i++) {
    //    
    objc_property_t property = plist[i];
    //      
    NSString *propertyName = [NSString stringWithUTF8String:property_getName(property)];
    //         key ,                value
    if (param[propertyName]) {
      [vc setValue:param[propertyName] forKey:propertyName];
    }
  }
  //  
  free(plist);
  //         
  /*
                     。
   */
  UIViewController *currentVC = [Utils getCurrentVC];
  if ([currentVC isKindOfClass:[UINavigationController class]]) {
    [(UINavigationController *)currentVC pushViewController:vc animated:YES];
  }else{
    [currentVC.navigationController pushViewController:vc animated:YES];
  }
}
 소 규모 자체 측정 을 통 해 수 요 를 실현 할 수 있다 는 것 을 발견 하 였 다.하지만 실현 기간 이 길지 않 아 부족 한 점 이 있 을 수 있 으 니 참고 하 시기 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기