FormValidatorSwift
FormValidatorSwift 框架允许您以方便的方式验证文本字段和文本视图的输入。它已经被 ustwo 的 iOS 开发者开发和使用了。
功能
- 简化地用
ValidatorTextField
代替UITextField
或NSTextField
(用ValidatorTextView
代替UITextView
或NSTextView
) - 知道哪里出了错以及出了什么错
- 使用正则表达式创建自己的条件,例如
- 创建包含一系列条件的自定义验证器
- 支持 iOS、macOS 和 tvOS
依赖项
安装
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。您可以使用以下命令安装它:
$ gem install cocoapods
要使用 CocoaPods 将 FormValidatorSwift 整合到您的 Xcode 项目中,请在您的 Podfile
中指定它。
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.3'
use_frameworks!
pod 'FormValidatorSwift', '~> 3.0'
然后,运行以下命令:
$ pod install
手动
如果您不想使用上述任何依赖管理器,可以将 FormValidatorSwift 手动集成到您的项目中。
嵌入框架
- 打开终端,使用
cd
命令进入您的顶级项目目录,如果您的项目不是作为 git 仓库初始化,则运行以下命令:
$ git init
- 运行以下命令以将 FormValidatorSwift 添加为 git 子模块:
$ git submodule add https://github.com/ustwo/formvalidator-swift.git
-
打开新的
FormValidatorSwift
文件夹,并将FormValidatorSwift.xcodeproj
拖入您应用程序 Xcode 项目的项目导航器中。它应该嵌套在您应用程序的蓝色项目图标下。它位于所有其他 Xcode 组的上方或下方并无影响。
-
在项目导航器中选择
FormValidatorSwift.xcodeproj
,并验证其部署目标是否与您的应用程序目标相匹配。 -
接下来,在项目导航器中选择您的应用程序项目(蓝色项目图标),并在侧边栏中选择“targets”下方的应用程序目标以导航到目标配置窗口。
-
在窗口顶部的标签栏中,打开“General”面板。
-
在“Embedded Binaries”部分下面单击
+
按钮。 -
您将看到两个不同的
FormValidatorSwift.xcodeproj
文件夹,每个文件夹内都有一个嵌套的FormValidatorSwift.framework
版本,它们位于一个Products
文件夹中。您可以选择哪个
Products
文件夹无关紧要,但您需要选择顶部或底部的FormValidatorSwift.framework
。 -
请选择顶部的
FormValidatorSwift.framework
用于 iOS,中间的用于 tvOS,或底部的用于 macOS。您可以通过检查项目的构建日志来验证您选择了哪个版本。构建目标中的
FormValidatorSwift
将列为FormValidatorSwift iOS
、FormValidatorSwift macOS
或FormValidatorSwift tvOS
。 -
这就完成了!
FormValidatorSwift.framework
将自动添加为目标依赖项、链接框架和嵌入框架,在复制文件阶段完成,这是在模拟器和设备上构建所需全部内容。
用法
FormValidatorSwift 的两个核心组件是 Condition
和 Validator
。这些都是协议,并且框架提供了许多常用的实现。
Condition
定义了对字符串的要求以及检查字符串的方式。而 Validator
基于一系列 Condition
检查字符串是否有效。这为 FormValidatorSwift 的其他要素构建了基础。
ValidatorTextField
和 ValidatorTextView
提供了可验证文本输入方法的常见 UI 实现。这些控件可以被组合成一个 Form
,以便快速验证所有文本输入。
条件
Condition
通常由正则表达式定义。在默认实现中,用于检查字符串。但是,您可以提供自己实现的 check(text:)
函数以进行更复杂的验证。
以下是一个使用内置条件的示例。请注意,调用 check(text:)
只简单返回一个 Bool
值,表示文本是否有效。
let condition = AlphanumericCondition()
let validResult = condition.check("Foo123")
let invalidResult = condition.check("Foo?!@")
验证器
Validator
接受一个 Condition
数组,并对每个条件进行检查以验证一个字符串。如果验证失败,则 checkConditions(text:)
将返回违反条件的数组。
以下是一个使用内置验证器的示例。在这个示例中,validResult
将为 nil
,而 invalidResult
将为 [AlphanumericCondition]
。
let validator = AlphanumericValidator()
let validResult = validator.checkConditions("Foo123")
let invalidResult = validator.checkConditions("Foo?!@")
ValidatorTextField
为了提供用户界面,您可以使用ValidatorTextField
或ValidatorTextView
。这些分别是UITextField
和UITextView
的子类(或在macOS上是NSTextField
和NSTextView
)。它们都遵循ValidatorControl
协议,该协议有使用Validator
检查文本的附加功能。
以下是一个只允许字母数字文本的文本字段的示例。
let nameTextField = ValidatorTextField(validator: AlphanumericValidator())
这对于更复杂的文本字段效果不佳。例如,您可能不希望在用户完成输入之前验证电子邮件地址。要推迟验证,我们需要将shouldAllowViolation
和validateOnFocusLossOnly
都设置为true
。示例
let emailTextField = ValidatorTextField(validator: EmailValidator())
emailTextField.shouldAllowViolation = true
emailTextField.validateOnFocusLossOnly = true
我们可以通过实现ValidatorControlDelegate
并设置 ourselves 为验证代理(使用setValidatorDelegate(_:)
方法)来响应该变化。以下是一个示例实现。在示例中,如果我们突出显示无效的文本字段,则使用红色边框。我们在名为errorLabel
的标签中列出错误并将其呈现给用户。
func validatorControl(validatorControl: ValidatorControl, changedValidState validState: Bool) {
guard let controlView = validatorControl as? UIView else {
return
}
if validState {
controlView.layer.borderColor = nil
controlView.layer.borderWidth = 0.0
errorLabel.hidden = true
} else {
controlView.layer.borderColor = UIColor.red.CGColor
controlView.layer.borderWidth = 2.0
}
}
func validatorControl(validatorControl: ValidatorControl, violatedConditions conditions: [Condition]) {
var errorText = ""
for condition in conditions {
errorText += condition.localizedViolationString
}
errorLabel.text = errorText
errorLabel.hidden = false
}
func validatorControlDidChange(validatorControl: ValidatorControl) {
// Not used in this example
}
表单
我们可以将多个ValidatorControl
组合成Form
。我们有一个方便的实现叫做ControlForm
。然后,我们可以将之前的示例中的字母数字文本字段和电子邮件文本字段组合成表单。这为在将表单数据提交到服务器之前检查整个表单是否有效提供了一种简单的方法。以下是一个示例
var form = ControlForm()
form.addEntry(nameTextField)
form.addEntry(emailTextField)
if form.isValid {
// Hooray! Our form is valid. Submit the data!
...
} else {
// Sad day, we need to have the user fix the data.
...
}
示例
更详细的示例可以在该存储库中的iOS Example
和macOS Example
应用程序中找到。
合作
我们欢迎贡献者!无论您是在修复拼写错误、解决虫虫还是添加新功能,请加入我们,共同打造这个项目。阅读我们的贡献指南以了解如何提供您的支持。
维护者
- Shagun Madhikarmi (@madhikarma)
- 亚伦·麦克塔维斯 (@aamctustwo)
联系方式
许可证
FormValidatorSwift遵守MIT许可协议。请参阅LICENSE文件。