RAGTextField
UITextField
的子类,增加了动画占位符和可选的提示标签。
它支持在文本背景中放置任意视图(提供了轮廓和下划线视图),以及左边和右边的视图,文本对齐,灵活的内边距和偏移量。
示例
要运行示例项目,请克隆仓库,并首先从 Example 目录中运行 pod install
。
要求
用 Swift 5 编写,需要 iOS 9。
Swift 支持
Swift 版本 | 库版本 |
---|---|
3 | <= 0.2.1 |
4 | <= 0.12.1 |
5 | 从 0.13.0 开始 |
安装
RAGTextField
通过 CocoaPods 和 Carthage 提供。
Cocoapods
将以下行添加到您的Podfile中
pod "RAGTextField"
请在终端中调用脚本来尝试使用pod pod try RAGTextField
。
Carthage
将以下行添加到您的Cartfile中
github "raginmari/RAGTextField"
如何使用
在安装库并导入模块 RAGTextField
后,文本字段可以像任何其他文本字段一样使用(在代码中以及在您的故事板和nibs中)。
与 UITextField
的主要区别如下
- 浮动占位符,灵感来源于谷歌 Material Design 指南中描述的一个。
- 以下方的实际文本的 提示标签,可以用来提供额外提示或报告错误。
- 文本背景 视图(不包括占位符和提示标签)可用于自定义文本输入的样式。示例项目使用此功能。
许多文本字段的属性都是 IBInspectable
。
占位符
占位符替换了超类占位符。分配给 placeholder
属性的值由 RAGTextField
独占处理。占位符的文本对齐方式与文本字段的文本对齐方式相匹配。
您可以通过以下不同的方式自定义占位符的 外观和行为
- 使用
placeholderFont
属性为占位符分配一个 自定义字体或字体大小。默认情况下,占位符使用文本字段的字体。 - 使用
placeholderColor
属性更改占位符的 颜色。默认情况下,占位符使用文本字段的文本颜色。 - 使用
transformedPlaceholderColor
属性设置在文本字段被编辑且占位符转换为浮动位置时应用于占位符的颜色。 - 使用
placeholderScaleWhenEditing
属性来指定 在浮动位置的占位符应用的缩放。默认值为 1。 - 使用
scaledPlaceholderOffset
属性来偏移占位符在浮动位置的文本。默认值为 0。正数值 将占位符向上移动,远离文本。 placeholderMode
属性的值决定了 占位符的行为scalesWhenEditing
(默认): 当文本字段成为第一个响应者时,占位符即被变换。此外,只要文本字段中有文本,占位符就会保持变换。scalesWhenNotEmpty
: 文本字段中有文本时,占位符立即和持续地被变换。scalesAlways
: 占位符总是以变换后的位置显示。simple
: 禁用浮动占位符。占位符的行为类似于其超类。
- 使用
placeholderAnimationDuration
属性来调整 占位符在移动到或从浮动位置时的动画持续时间。如果值设置为nil
,则使用默认值。将值设置为 0 以 禁用 占位符动画。
提示标签
默认禁用提示标签,并且当 hint
属性的值为 nil
时。如果将非空值(包括空字符串)赋给 hint
属性,则会更新标签的布局并保留提示标签的空间。提示的文本对齐方式与文本字段的文本对齐方式相匹配。提示支持多行文本。
以下是您可以用来 自定义提示外观 的不同方法
- 使用
hintFont
属性将 自定义字体或字体大小 分配给提示。默认情况下,提示使用文本字段的字体。 - 使用
hintColor
属性改变提示的颜色。默认情况下,提示使用文本字段的文本颜色。 - 使用
hintOffset
属性将提示标签从文本中偏移。默认值为 0。正数值 将提示向下移动,远离文本。 - 使用
layoutAlwaysIncludesHint
属性始终将提示标签保留在布局中,即使hint
值为nil
。此属性的默认值是false
。
文本背景视图
通过将任意视图赋值给 textBackgroundView
属性,在文本的背景中添加视图。视图的框架在需要时由 RAGTextField
更新。视图的大小使它匹配文本(以及占位符和/或提示)的大小加上内边距。
以下是您可以用来 自定义文本背景视图外观 的不同方法。
- 使用
textPadding
属性为文本应用内边距。内边距扩大文本背景视图。默认情况下,内边距为0
。 - 使用
textPaddingMode
属性将文本填充应用到文本本身、占位符、提示信息或全部。可以将相应的子视图包裹在文本背景视图中。示例项目中使用了文本填充模式。
下划线视图
使用类 UnderlineView
在文本下方绘制一个 动画下划线。将类的实例赋值给文本字段的 textBackgroundView
属性。下划线的样式可以由视图本身自动更新(参见其 textField
属性),也可以由视图控制器或文本字段代理手动控制。示例项目使用了下划线视图。
轮廓视图
使用类 OutlineView
在文本周围绘制一个轮廓。轮廓可以具有圆角,也可以填充和内嵌。将类的实例赋值给文本字段的 textBackgroundView
属性。根据 textPaddingMode
的值,轮廓可以包含占位符和/或提示标签。
连接
如果您想使用带 Bond 的文本字段,可以添加这些扩展,以便您可以将 hint
和 placeholder
属性绑定。
extension ReactiveExtensions where Base: RAGTextField {
var hint: Bond<String?> {
return bond { textField, hint in
textField.hint = hint
}
}
var placeholder: Bond<String?> {
return bond { textField, placeholder in
textField.placeholder = placeholder
}
}
}
已知问题
以下是与 RAGTextField
相关的已知或可能的问题
- UITextField 的
attributedText
属性可能不受支持。 - UITextField 的
attributedPlaceholder
不受支持。 borderStyle
属性应该是.none
。
希望这些问题将在未来的更新中得到解决。
作者
raginmari, [email protected]
许可证
RAGTextField是在MIT许可证下可用的。有关更多信息,请参阅LICENSE文件。