FODFormKit 0.1.1

FODFormKit 0.1.1

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2014年12月

未知所有者 维护。




  • Frank O'Dwyer

使用

FODFormKit 是一个用于创建 iOS 动态表单的库。

要运行示例项目;克隆仓库,然后首先从项目目录运行 pod install

有关如何在您的项目中使用此库的详细信息,请参阅下文 创建表单

屏幕截图

包含子表单的表单

 

内联(可展开)子表单

   

内联(可展开)编辑器

 

文本字段导航

 

要求

FODFormKit 目前需要 iOS7。它在 iOS6 上基本正常工作,但有外观问题,目前我没有修复这些问题的需求,所以我不太可能自己修复它们。不过,欢迎提交修复 iOS6 的请求。

安装

创建表单

以编程方式创建表单

您可以使用 FODFormBuilder 对象程序化地创建表单。有关更多示例,请参阅演示项目(FODViewController.m)。

FODFormBuilder *builder = [[FODFormBuilder alloc] init];

[builder startFormWithTitle:@"Main Form"];

[builder section:@"Section 1"];

[builder selectionRowWithKey:@"picker"
                    andTitle:@"Select a wibble"
                    andValue:nil
                    andItems:@[@"wibble1", @"wibble2", @"wibble3"]];

[builder selectionRowWithKey:@"picker2"
                    andTitle:@"Select a fooby"
                    andValue:nil
                    andItems:@[@"fooby1", @"fooby2", @"fooby3"]].displayInline = YES;

[builder section];

[builder rowWithKey:@"date2"
            ofClass:[FODDateSelectionRow class]
           andTitle:@"When"
           andValue:nil];
[builder rowWithKey:@"date1"
            ofClass:[FODDateSelectionRow class]
           andTitle:@"When Inline"
           andValue:nil].displayInline = YES;

FODForm *form = [builder finishForm];

构建对象会自动跟踪嵌套子表单并将它们适当地连接到其父表单。

对构建对象的每次调用都会返回刚刚创建的表单、行或节。如果可能,要让表单或行显示为内联(使用展开/折叠单元格),请添加 .displayInline = YES;。 (目前只有子表单和支持此选项的 FODSelectionRowFODDateSelectionRow 类型的行。)

每行必须在表单中具有唯一键(在内联子表单的情况下,键也必须在父表单中唯一)。键用于在表单填写完毕后检索表单值。

从 plist 创建表单

可以通过编程构建表单,并调用 form.toPlist 来获取表单的 plist 表示形式。然后可以将此格式写入文件,以获取可以编辑的模板。例如,您可以在调试器中执行此类操作

(lldb) po [form.toPlist writeToFile:@"/Users/frank/form2.plist" atomically:YES]

要从 plist 载入表单,请使用

id plist = // load the plist from somewhere, e.g. a file or resource
FODForm *form = [FODForm fromPlist:plist];

使用表单

为了显示表单并允许用户完成它

FODFormViewController *vc = [[FODFormViewController alloc] initWithForm:form userInfo:nil];
vc.delegate = self;
[self.navigationController pushViewController:vc animated:YES];

为了检索用户填写的内容的值,以及处理取消操作,实现表单代理方法

- (void)formSaved:(FODForm *)model
         userInfo:(id)userInfo {
    NSString *value1 = (NSString*)[model valueForKeyPath:@"somekey"];
    NSString *value2 = (NSString*)[model valueForKeyPath:@"subform.somekey"];
    [self.navigationController popViewControllerAnimated:YES];
}

- (void)formCancelled:(FODForm *)model
             userInfo:(id)userInfo {
    [self.navigationController popViewControllerAnimated:YES];
}

定制

虽然库还不支持大量定制,但可以通过子类化 FODCellFactory 来定制许多方面,以返回不同行类型的不同单元格(例如,现有单元格的子类或 FODFormCell 的新子类)。

您还可以通过添加 FODFormRow 的子类,为它添加一个表示 FODFormCell 的子类,以及扩展 FODFormBuilderFODCellFactory 来支持新行和单元格类型,来添加完全新的行类型。

要添加新的内联可编辑单元格类型,可以子类化 FODInlineEditorCell,并提供一个用于编辑您的行类型的视图控制器。提供以下方法的覆盖后,超类将管理您的视图控制器的内容。

- (UIViewController*)createEditorController;
- (CGFloat) heightForEditorController:(CGFloat)maxHeight;

请参阅 FODInlinePickerCellFODInlineDatePickerCell 的示例。

(如果您添加了子类或新行类型,请随意发送 pull request)

注意事项

  • 请认真对待 0.x 版本号(:-)。这是在几天内制作的库的首次切工。尽管大部分功能表现良好,但 API 一定会改变。例如,我希望添加定制显示在文本字段中的键盘的能力,并添加更多行类型和定制选项。

  • 许多方面在横向模式或设备旋转时工作不善。尽管如此,处理了自动旋转,但对于某些编辑类型,横向模式下的高度不足,无法使用。您可能希望因为这一点而阻止横向旋转。

  • 对 iPad 的支持还很少。

作者

Frank O'Dwyer

许可

FODFormKit 可在 MIT 许可下使用。有关更多信息,请参阅 LICENSE 文件。

Bitdeli Badge