第一种方式:修改框架源码
如果您可以修改框架源代码,您实际上可以更轻松地做到这一点:
在STPPaymentCardTextField.m改
self.allFields = @[numberField,
expirationField,
cvcField,
postalCodeField];
进入
self.allFields = @[numberField,
expirationField,
postalCodeField];
并在STPPaymentCardTextFieldViewModel.m 更改
- (BOOL)isValid {
return ([self validationStateForField:STPCardFieldTypeNumber] == STPCardValidationStateValid
&& [self validationStateForField:STPCardFieldTypeExpiration] == STPCardValidationStateValid
&& [self validationStateForField:STPCardFieldTypeCVC] == STPCardValidationStateValid
&& (!self.postalCodeRequired
|| [self validationStateForField:STPCardFieldTypePostalCode] == STPCardValidationStateValid));
}
进入
- (BOOL)isValid {
return ([self validationStateForField:STPCardFieldTypeNumber] == STPCardValidationStateValid
&& [self validationStateForField:STPCardFieldTypeExpiration] == STPCardValidationStateValid
&& (!self.postalCodeRequired
|| [self validationStateForField:STPCardFieldTypePostalCode] == STPCardValidationStateValid));
}
第二种方式:继承 STPPaymentCardTextField
我不喜欢编辑框架,因为我喜欢更新,所以我通过子类化 STPPaymentCardTextField(Swift 中的示例)来做到这一点:
class STPPaymentCardTextFieldNoCVC: STPPaymentCardTextField {
func removeCVC() {
if let fieldsView = subviews.first {
for view in fieldsView.subviews where view.tag == 2 {
// set a default cvc for the validator and remove the field
(view as? UITextField)?.text = "123"
view.removeFromSuperview()
}
}
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
removeCVC()
}
override init(frame: CGRect) {
super.init(frame: frame)
removeCVC()
}
}