MAFormViewController 1.4.1

MAFormViewController 1.4.1

测试已测试
语言语言 Obj-CObjective C
许可协议 MIT
发布最后发布2015年4月

Mike Amaral 维护。



MAFormViewController 设计用于与 MATextFieldCells 配合使用,以实现快速、简单的基于 UITableView 的表单创建。它能自动处理表单配置、格式化、导航、验证和提交。

用法

将 MAFormViewController.h/m, MAFormField.h/m, 和 MATextFieldCell.h/m 添加到您的项目中,并将 MAFormViewController.h 和 MAFormField.h 导入到您想要显示表单的任何视图控制器中。

MAFormViewController 由 MAFormField 对象的数组组成 - 这一行代码中封装了大量的重复代码和逻辑,使得您不需要反复编写。键用于以后识别每个字段用户输入的信息,类型(以下将提供更多详情)定义了将被创建的表单字段的类型,这包括键盘类型、数据域限制、初始值(如果您想将现有数据预填充到表单字段中)、每个字段的占位符,一个 BOOL 用于告诉表单是否希望“动画”占位符出现在文本字段上方,以便用户在文本出现后可以看到他们正在编辑的内容,以及一个 BOOL 用于验证表单以确保(或不是)该字段具有条目。

之后,您可以把这些 MAFormField 对象分组到数组中,代表表单的一部分。一个表单可以由任意数量的部分和字段组成。您只需创建所有字段,按您偏好的方式分组,并将它们传递给 MAFormViewController 的自定义 init 方法,该方法接受您创建的字段、用于提交/发送/保存表单信息的按钮标题,以及一个块,该块将使用您在创建字段时提供的键作为字典的键,以及用户在字段中输入的值作为与这些键相关联的值来表示表单。

MAFormField *nameField = [MAFormField fieldWithKey:@"name" type:MATextFieldTypeName initialValue:nil placeholder:@"Name" required:YES];
MAFormField *usernameField = [MAFormField fieldWithKey:@"username" type:MATextFieldTypeName initialValue:nil placeholder:@"Username" required:YES];
MAFormField *passwordField = [MAFormField fieldWithKey:@"password" type:MATextFieldTypePassword initialValue:nil placeholder:@"Password" required:YES];

// separate the cells into sections
NSArray *firstSection = @[nameField];
NSArray *secondSection = @[usernameField, passwordField];
NSArray *cellConfig = @[firstSection, secondSection];

// create the form and present it modally with its own navigation controller
MAFormViewController *formVC = [[MAFormViewController alloc] initWithCellConfigurations:cellConfig actionText:@"Save" animatePlaceholders:YES handler:^(NSDictionary *resultDictionary) {
    // now that we're done, dismiss the form
    [self dismissViewControllerAnimated:YES completion:nil];

    // if we don't have a result dictionary, the user cancelled, rather than submitted the form
    if (!resultDictionary) {
        return;
    }

    // do whatever you want with the results - you can access specific values from the dictionary using
    // the key you provided when you created the form
    [[[UIAlertView alloc] initWithTitle:nil message:[NSString stringWithFormat:@"Thanks for registering %@!", resultDictionary[@"name"]] delegate:nil cancelButtonTitle:@"Yay!" otherButtonTitles:nil] show];
}];

    // optional - disable the unsaved changes warning
    // formVC.warnForUnsavedChanges = NO;

    // optional - override the default unsaved changes message
    // formVC.unsavedChangesMessage = @"WAIT!!! You have unsaved changes!!";

UINavigationController *formNC = [[UINavigationController alloc] initWithRootViewController:formVC];
[self presentViewController:formNC animated:YES completion:nil];

结合 MAFormViewControllers 和 MATextFieldCells 的便利和易用性,可以免除您处理与创建表单相关的最繁琐和重复性任务的需求。以下所有操作都自动为您完成:

  • 创建和配置所有的文本字段和表格视图
  • 自动弹出键盘,并将焦点设置在第一个单元格上以实现快速编辑。
  • 为字段的域名设置正确的键盘类型。
  • 根据字段是否是表单中的最后一个设置正确的返回键类型(下一步或完成)。
  • 通过键盘从单元格到单元格进行导航,这样用户无需点击下一个单元格即可继续填写表单。
  • 在最后一个字段编辑完成后关闭键盘。
  • 验证必填字段 - 确保它们不被留空,告诉用户哪些字段丢失,并设置对空值单元格的焦点。
  • 在用户点击取消之前警告用户关于未保存的更改。
  • 将所有表单数据打包成字典以方便使用。

带动画占位符

demo

不带动画占位符

demo

MATextFieldTypes 和标准设置

默认

  • 自动大写新句子
  • 自动更正开启
  • 默认键盘

姓名

  • 自动大写所有单词
  • 自动更正关闭
  • 默认键盘

电话

  • 数字键盘
  • 自动格式化为: (xxx) xxx-xxxx
  • 在键盘上添加工具栏以包含操作按钮

电子邮件

  • 自动大写关闭
  • 自动更正关闭
  • 电子邮件键盘

地址

  • 自动大写所有单词
  • 自动更正开启
  • 默认键盘

StateAbbr

  • 自动大写所有字符
  • 自动更正关闭
  • 默认键盘
  • 2个字符限制

ZIP

  • 数字键盘
  • 5位限制

数字

  • 数字键盘

十进制

  • 十进制键盘

日期

  • 数字键盘
  • 自动转换为 "MM/DD/YYYY" 格式

密码

  • 自动大写关闭
  • 自动更正关闭
  • 默认键盘
  • 安全文本输入(字符被模糊处理)

网址

  • 自动大写关闭
  • 自动更正关闭
  • 网址键盘

非可编辑

  • 禁用文本输入框 - 用于显示/信息性目的

MATextFieldActionTypes

  • 不创建操作栏/按钮,并使用键盘默认返回键类型。在键盘上按 'return' 不做任何事情。

下一步

  • 如果字段类型需要数字键盘因此没有 'return key',则创建并添加工具栏作为键盘的输入辅助视图,标题为 "下一步"。您需要确保在 actionBlock 属性中实现上述预期操作(切换哪个文本输入框是第一个响应者)。
  • 如果字段类型具有包含 'return key' 的键盘,则返回键类型设置为 "下一步"。您需要确保在 actionBlock 属性中实现上述预期操作(切换哪个文本输入框是第一个响应者)。

完成

  • 如果字段类型需要数字键盘因此没有 'return key',则创建并添加工具栏作为键盘的输入辅助视图,标题为 "完成"。您需要确保在 actionBlock 属性中实现上述预期操作(提交适当的第一个响应者)。
  • 如果字段类型具有包含 'return key' 的键盘,则返回键类型设置为 "完成"。您需要确保在 actionBlock 属性中实现上述预期操作(提交适当的第一个响应者)。

测试

在 Xcode 中打开项目,选择模拟器,然后按 command-U。

社区

欢迎提出问题、评论、问题和拉取请求!感谢 Whelton 为 Cocoapods 集成,感谢 jverdi 的出色项目(https://github.com/jverdi/JVFloatLabeledTextField)为动画占位符提供灵感。

许可协议

本项目按照 MIT 许可协议提供。有关详细信息,请参阅 LICENSE.txt。

Bitdeli Badge