CreditCardRow
由 Xmartlabs SRL 创建。
内容
简介
CreditCardRow
是 Eureka 的自定义行,用户可以在此输入信用卡、其到期日期以及 CVV/CVC 值。它具有默认的 UI 设计,但可以轻松更改(几乎)以适应其他任何设计。
用法
import Eureka
import CreditCardRow
class ViewController: FormViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Append the default CreditCardRow and my custom MyCreditCardRow
form +++ Section()
<<< CreditCardRow()
}
}
需求
- iOS 9.3+
- Xcode 10.2+
参与
在贡献之前,请查看CONTRIBUTING文件以获取更多信息。
如果您在应用程序中使用CreditCardRow,我们很想了解一下!请通过twitter联系我们。
示例
按照以下步骤运行示例项目
- 克隆CreditCardRow仓库
- 在下载的文件夹中打开终端并运行carthage update
- 打开CreditCardRow工作空间
- 运行示例项目。
安装
CocoaPods
CocoaPods是Cocoa项目的依赖管理器。
要安装CreditCardRow,只需将以下行添加到您的Podfile
pod 'CreditCardRow', '~> 3.2'
Carthage
Carthage是Cocoa的一个简单、分散的依赖管理器。
要安装CreditCardRow,只需将以下行添加到您的Cartfile中
github "EurekaCommunity/CreditCardRow" ~> 3.0
自定义
如果一行不具可定制性,那么它就不值得什么。因此,此行的目标是尽可能地可定制。理想情况下,您应该能够使用这里实现的所有逻辑,再加上一个完全不同的设计。您还应该能够轻松地切换一些基本的行为。
对于像字体、颜色、边距、分隔符这样的基本样式,您应该使用cellSetup
和cellUpdate
。对于更复杂的东西,还有其他方法来创建您想要的内容。
CreditCardRow包括行导航,用户可以通过在单元格的accessoryView中点击按钮来从一张字段导航到下一张字段。如果您更改文本字段的顺序,则还应覆盖行导航功能。
CreditCardRow参数
CreditCardRow
以下变量可以被使用/修改
var numberSeparator: String = " "
:信用卡号的分隔符。支持多字符字符串,例如" - "。var expirationSeparator: Character = "/"
:在到期字段中月份和年份数字之间的分隔符。var maxCVVLength: Int = 4
:CVV/CVC字段的长度最大为4。var maxCreditCardNumberLength = 19
:信用卡号的最大长度。根据ISO 7812-1,信用卡长度可达19位。6位IIN,12位账户数字和一位校验数字。
例如,您可以这样做
<<< CreditCardRow() {
$0.numberSeparator = "-"
$0.expirationSeparator = "-"
$0.maxCreditCardNumberLength = 16
$0.maxCVVLength = 3
}
CreditCardCell参数
CreditCardCell
有以下变量(它们都是端点,可以从nib文件中连接)
var horizontalSeparator: UIView?
:原始单元格中数字字段和到期以及CVV字段之间的水平分隔符var verticalSeparator: UIView?
:原始单元格中到期和CVV字段之间的垂直分隔符var numberField: PaddedTextField!
:信用卡号的文本字段var expirationField: PaddedTextField?
:信用卡到期日期的文本字段。这是一个可选变量。您可以来实现一个没有expirationField
的单元格var cvvField: PaddedTextField?
:CVV值的文本字段。这个文本字段也是可选的。
PaddedTextField是UITextField的子类,实现了UITextField文本矩形的填充。
horizontalSeparator
和verticalSeparator
取决于默认设计。您可能不会使用它们,如果创建自己的设计。此外,由于expirationField
和cvvField
是可选的,您可以创建一个只包含信用卡号的单元格,例如(您可以在示例项目中找到它)
创建自定义nib文件
您可能想要按照自己的设计。要完成这个任务,您应遵循以下步骤
-
创建一个用户界面xib文件,并使用Xcode的Interface Builder进行编辑。您应该添加一个简单的
UITableViewCell
,并指定它的类是CreditCardCell
。确保该类的模块显示为CreditCardRow
。 -
为信用卡的号码添加一个UITextField。如果您还想添加信用卡的到期日期和CVV/CVC值的UITextField。
-
将这些UITextField连接到CreditCardCell.swift文件中对应的输出接口
-
自定义这些UITextField的内部导航方式(如果您已更改了字段的顺序。)
-
指定您想使用新创建的nib文件。您可以通过两种方式来完成这项操作
- 使用RowDefaults:如果您只想在您的应用程序中使用自定义的CreditCardRow,请使用此方法。
CreditCardRow.defaultRowInitializer = { $0.cellProvider = CellProvider<CreditCardCell>(nibName: "CustomCell", bundle: nil) }
- 或者创建一个自定义的行子类,继承自
_CreditCardRow
final class MyCreditCardRow: _CreditCardRow, RowType { required init(tag: String?) { super.init(tag: tag) cellProvider = CellProvider<CreditCardCell>(nibName: "CustomCell", bundle: nil) } }
扩展或覆盖CreditCardCell功能
有时候,创建自定义nib文件不够;您还需要子类化并更改一些功能。一个例子是如果您改变了文本字段在用户界面中的顺序,或者移除了expirationField
或cvvField
,并希望更改行导航。在这种情况下,您应该首先创建一个子类CreditCardCell
并覆盖inputAccessoryView
的方法。
class MyCreditCardCell: CreditCardCell {
override var inputAccessoryView: UIView? {
// customize the accessoryView. Have a look at its superclass's implementation
return super.inputAccessoryView
}
}
您可以通过覆盖某些方法或变量来改变任何行为。
为了使用这个MyCreditCardCell
,您需要在nib文件中指定正在使用此类,并且必须将CreditCardRow
的cellProvider
更改为使用您的自定义nib文件(如您在前一节中所做的)。
作者
路线图上的有哪些内容?
可能添加到CreditCardRow中的内容
- 实现一些Eureka验证
- 添加SwiftLuhn验证
变更日志
这可以在CHANGELOG.md文件中找到。