三、通过协议方法来进行节点配置
上面演示的创建表格视图的方式是在节点配置类中创建属性,分别配置属性的节点信息来创建每一个cell,开发者也可以不创建属性,或者创建属性但是不以属性为节点来进行cell配置,使用FXFrom协议的方法,也可以完成节点的创建和配置,示例如下:
@interface MyForm : NSObject<FXForm>
@end
@implementation MyForm
//创建与配置节点
- (NSArray *)fields
{
return @[
//这里面配置字典的方法和属性字典的配置方法一一致
@{FXFormFieldKey: @"email", FXFormFieldTitle: @"email"},
@{FXFormFieldKey: @"phone", FXFormFieldTitle: @"phone"},
@{FXFormFieldKey: @"address", FXFormFieldTitle: @"address"},
@{FXFormFieldKey: @"name", FXFormFieldTitle: @"name"}
];
}
@end
效果如下:
-(NSArray *)fields方法是FXForm协议中的一个方法,在这个方法中,可以直接进行节点的创建和配置,FXForm协议中还提供了两个方法,意义如下:
//这个方法用于配置额外的节点,如果需要某些节点不对应任何属性,可以在这个方法中配置
- (NSArray *)extraFields;
//这个方法需要返回一个字符串数组,如果需要某些属性不对应节点,即有属性的存在,但是不生成cell,可以将属性名传入返回
- (NSArray *)excludedFields;
节点也可以进行复合,例如可以将一个节点配置类作为属性设置给另一个节点配置类,示例如下:
//子节点信息配置类
@interface SubForm : NSObject<FXForm>
@property(nonatomic,assign)NSInteger age;
@property(nonatomic,assign)NSDate * date;
@end
@implementation SubForm
@end
//父节点信息配置类
@interface MyForm : NSObject<FXForm>
@property(nonatomic,strong)NSString * email;
@property(nonatomic,strong)NSString * passwd;
@property(nonatomic,assign)BOOL rememberMe;
//其中有属性为子节点
@property(nonatomic,strong)SubForm * subForm;
@end
@implementation MyForm
@end
子节点会被默认包装在新的视图控制器中,也可以设置FXFormFieldInline为@YES来使其复合进当前视图控制器,效果如下:
四、关于自定义视图控制器
如果开发者的视图控制器并不是继承于FXFormViewController,也可以使用FXForms来快捷的创建表单视图,开发者自定义的视图控制器需要遵守FXFormControllerDelegate协议,示例如下:
@interface ViewController : UIViewController<FXFormControllerDelegate>
//系统的tableView
@property(nonatomic,strong)UITableView * tableView;
//FX表单控制器
@property(nonatomic,strong)FXFormController * formController;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStyleGrouped];
self.formController = [[FXFormController alloc] init];
self.formController.tableView = self.tableView;
self.formController.delegate = self;
self.formController.form = [[MyForm alloc] init];
self.formController.form = [MyForm new];
[self.view addSubview:self.tableView];
}
@end
上面的代码极大了简化了ViewController中的代码量。
五、对Cell进行属性设置
在进行节点属性字典的配置时,可以通过访问属性路径的方式来对cell的属性进行一些配置,例如:
-(NSDictionary *)passwdField{
return @{@"textLabel.textColor":[UIColor redColor]};
}