iOS 개발 의 XLform 사용법

8372 단어 iOSXLForm
iOS 개발 에서'폼'인 터 페 이 스 를 개발 합 니 다.필드 가 조금 더 많은 것 은 보통 UITableView 로 합 니 다.XLform 은 바로 이러한 프레임 워 크 입 니 다.동적 표 보기 의 가장 강력 한 iOS 라 이브 러 리 를 만 들 고 폼 기능 을 실현 하 며 매우 간단 하고 편리 합 니 다.하지만 안 타 깝 게 도 많은 글 을 검색 해 봤 는데 공식 문서 만 번역 하고 많은 사람들 이 이 라 이브 러 리 를 사용 할 때 공식 문서 에 의 해 멀리 끌 려 갔 을 수도 있 습 니 다.어떻게 구체 적 으로 사용 해 야 할 지 모 르 겠 습 니 다.마침 최근 에 도 이 라 이브 러 리 를 사용 해 야 하기 때문에 입문 용 글 을 써 서 참고 하 시기 바 랍 니 다.
항목 가 져 오기
CocoaPods 를 사용 하거나 라 이브 러 리 파일 을 수 동 으로 가 져 오 려 면 프로젝트 원본 파일 을 직접 가 져 오 는 방식 을 선택 하 십시오.
 
항목 가 져 오기.png
2.개조 폼 뷰 컨트롤 러
ViewController 를 XLformViewController 로부터 계승 시 키 고 다음 두 가지 방법 을 다시 쓰 도록 합 니 다.

@interface OneViewController : XLFormViewController

@end


@implementation OneViewController

- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
  self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  if (self){
    [self initializeForm];
  }
  return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder {
  self = [super initWithCoder:aDecoder];
  if (self){
    [self initializeForm];
  }
  return self;
}
@end
3.구조 표

- (void)initializeForm {
  
  //       Cell     
  //self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
  //   Section   
  self.tableView.sectionHeaderHeight = 30;
  
  XLFormDescriptor * form;//form,        
  XLFormSectionDescriptor * section;//section,         
  XLFormRowDescriptor * row; //row,  section     row
  
  // Form
  form = [XLFormDescriptor formDescriptor];

  
  // First section
  section = [XLFormSectionDescriptor formSection];
  section.title = @"  ";
  [form addFormSection:section];
  //     
  row = [XLFormRowDescriptor formRowDescriptorWithTag:@"username" rowType:XLFormRowDescriptorTypeText];
  //   placeholder
  [row.cellConfig setObject:@"   " forKey:@"textField.placeholder"];
  //       
  [row.cellConfig setObject:[UIColor redColor] forKey:@"textField.textColor"];
  [section addFormRow:row];
  //   
  row = [XLFormRowDescriptor formRowDescriptorWithTag:@"password" rowType:XLFormRowDescriptorTypePassword];
  //   placeholder   
  NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:@"  " attributes:
                   @{NSForegroundColorAttributeName:[UIColor greenColor],
                    }];
  [row.cellConfig setObject:attrString forKey:@"textField.attributedPlaceholder"];
  [section addFormRow:row];
  
  
  
  // Second Section
  section = [XLFormSectionDescriptor formSection];
  section.title = @"  ";
  [form addFormSection:section];
  //      
  row = [XLFormRowDescriptor formRowDescriptorWithTag:@"birthday" rowType:XLFormRowDescriptorTypeDate title:@"    "];
  row.value = [NSDate dateWithTimeIntervalSinceNow:60*60*24];
  [section addFormRow:row];
  
  
  
   // Third Section
  section = [XLFormSectionDescriptor formSection];
  section.title = @"  ";
  [form addFormSection:section];
  //     
  row = [XLFormRowDescriptor formRowDescriptorWithTag:@"userpic" rowType:XLFormRowDescriptorTypeImage];
  [section addFormRow:row];
  
  
  
  // Fourth Section
  section = [XLFormSectionDescriptor formSection];
  section.title = @"   ";
  [form addFormSection:section];
  //    
  row = [XLFormRowDescriptor formRowDescriptorWithTag:@"sex" rowType:XLFormRowDescriptorTypeSelectorPush];
  row.noValueDisplayText = @"  ";
  row.selectorTitle = @"    ";
  row.selectorOptions = @[@" ",@" ",@"  "];
  row.title = @"  ";
  [row.cellConfigForSelector setObject:[UIColor redColor] forKey:@"textLabel.textColor"];
  [row.cellConfigForSelector setObject:[UIColor greenColor] forKey:@"detailTextLabel.textColor"];
  [section addFormRow:row];
  
  
  
  // Fifth Section
  section = [XLFormSectionDescriptor formSection];
  section.title = @"  ";
  [form addFormSection:section];
  //   
  row = [XLFormRowDescriptor formRowDescriptorWithTag:@"enforce" rowType:XLFormRowDescriptorTypeBooleanSwitch title:@"  "];
  [section addFormRow:row];
  
  
  // Sixth Section
  section = [XLFormSectionDescriptor formSection];
  [form addFormSection:section];
  //   
  row = [XLFormRowDescriptor formRowDescriptorWithTag:@"conform" rowType:XLFormRowDescriptorTypeButton];
  row.title = @"  ";
  [section addFormRow:row];
  

  self.form = form;
}

-(void)didSelectFormRow:(XLFormRowDescriptor *)formRow{

  //             
  if([formRow.tag isEqualToString:@"conform"] && formRow.rowType == XLFormRowDescriptorTypeButton){

    //         
    NSDictionary *values = [self formValues];

    NSLog(@"%@", values);

  }
  
  [super didSelectFormRow:formRow];

}

//                  
//-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//
//  NSLog(@"%s", __func__);
//
//}
@end
효과 도

효과 도.png
총화
앞의 두 단 계 는 공식 문서 에서 찾 을 수 있 고 간단 합 니 다.관건 은 initializeForm 방법 에서 구체 적 으로 표를 구성 하 는 과정 입 니 다.여기 서 몇 가 지 를 강조 할 필요 가 있 습 니 다.
1.XLformView Controller 는 UITableView DataSource,UITableView Delegate 를 실현 하고 UITableView 를 가지 고 있 습 니 다.이 는 이러한 성명 에서 알 수 있 기 때문에 UITableView,UITableView DataSource,UITableView Delegate 의 방법 은 모두 정상적으로 사용 할 수 있 습 니 다.
@interface XLFormViewController : UIViewController
2.XLform 은 폼 을 Form,Section,Row 세 가지 차원 으로 추상 화하 고 각각 세 가지 유형 에 대응한다.

XLFormDescriptor * form;//form,        
XLFormSectionDescriptor * section;//section,         
XLFormRowDescriptor * row; //row,  section     row
3.모든 폼 의 구체 적 인 정 보 는 마지막 에 XLformRow Descriptor 에 발 을 들 여 놓 습 니 다.이 를 통 해 서로 다른 스타일 의 폼 항목 을 설정 할 수 있 습 니 다.구조 함수 의 rowType 을 통 해 구체 적 인 폼 유형 을 지정 합 니 다.이 프레임 워 크 는 매우 풍부 한 rowType 을 제공 합 니 다.구체 적 으로 공식 문서 설명 을 참고 할 수 있 습 니 다.
4.설정 폼 항목 을 세분 화 하려 면 XLformRow Descriptor 의 속성 을 빌려 설정 해 야 합 니 다.

@property (nonatomic, readonly, nonnull) NSMutableDictionary * cellConfig;
@property (nonatomic, readonly, nonnull) NSMutableDictionary * cellConfigForSelector;
이 설정 을 할 때 학생 들 은 구체 적 으로 어떻게 속성 을 설정 할 수 있 는 지 모 릅 니 다.예 를 들 어 폼 입력 상자 의 placeholder 를 어떻게 설정 합 니까?placeholder 색상 을 어떻게 설정 합 니까?사실 이것 은 KVC 를 사 용 했 습 니 다.둘 다 UITextField 클래스 의 속성 이기 때문에 UITextField 에 직접 들 어가 서 다음 과 같은 정 보 를 찾 을 수 있 습 니 다.

@property(nullable, nonatomic,copy)  NSString        *placeholder;  
@property(nullable, nonatomic,copy)  NSAttributedString   *attributedPlaceholder NS_AVAILABLE_IOS(6_0);
그러면 설정 하면...

[row.cellConfig setObject:@"   " forKey:@"textField.placeholder"];
 [row.cellConfig setObject:attrString forKey:@"textField.attributedPlaceholder"];
여기 키 의 쓰기 에 주의 하 세 요.바로 KVC 의 쓰기 입 니 다.다른 속성 은 이에 따라 유추 된다.
5.설 정 된 폼 의 값 을 어떻게 가 져 옵 니까?사실 매우 간단 합 니 다.이 프레임 워 크 는 formValues 방법 을 제공 합 니 다.반환 유형 은 NSDictionary 입 니 다.그 중에서 key 는 XLformRow Descriptor 설정 시의 태그 입 니 다.컨트롤 러 에서 이 방법 을 직접 호출 하여 폼 값 을 얻 을 수 있 습 니 다.위의 효과 도 설정 후의 폼 정 보 는 다음 과 같 습 니 다.

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기