测试已测试 | ✗ |
语言语言 | Obj-CObjective C |
许可证 | MIT |
发布最后发布 | 2017年2月 |
由 Bernhard Schandl 维护。
为 XLForm 提供的一个简单的验证信息弹出扩展。
要运行示例项目,请克隆仓库,并首先从 Example 目录运行 pod install
。
MSXLFormValidationPopup 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod "MSXLFormValidationPopup"
在您的视图控制器(它将是 XLFormViewController
的子类)中设置好表单后,实例化一个验证弹出窗口(保持强引用,以便它不会立即被释放)
@property (nonatomic) MSXLFormValidationPopupController *validationPopup;
[...]
XLFormDescriptor *form = [XLFormDescriptor formDescriptor];
[...]
self.form = form;
self.validationPopup = [[MSXLFormValidationPopupController alloc] init];
不要为此实例重复使用其他表单,因为它将保持一些内部状态。如果您有多个表单,请使用多个 MSXLFormValidationPopupController
实例。
然后,您需要在实现自己的方法后转发您表单视图控制器的一些方法到弹出控制器,以便它可以相应地做出反应。例如,您需要转发 -viewDidAppear:
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// do your own stuff here ...
[self.validationPopup formViewController:self viewDidAppear:animated];
}
这些都是您需要转发的方法
-beginEditing
-endEditing
-formRowDescriptorValueHasChanged:oldValue:newValue
-viewDidAppear
-viewWillDisappear
-didSelectFormRow
-viewWillTransitionToSize:withTransitionCoordinator
-scrollViewDidScroll
确保它们都得到了转发,否则验证弹出窗口可能无法正确工作。
默认情况下,弹出窗口将在 XLForm 表视图单元格的上方显示,它反映了其错误状态。它考虑了 必填字段(rowDescriptor.requireMsg
)以及 XLForm 的 验证框架(由关联的 XLFormValidator
返回的消息)。
如果想要自定义弹出窗口,为验证弹出控制器注册一个委托,并实现 MSXLFormValidationPopupControllerDelegate
协议
self.validationPopup = self;
要自定义默认弹出窗口的外观,实现 validationPopupController:willPresentValidationInController:
方法
-(void)validationPopupController:(MSXLFormValidationPopupController *)popupController willPresentValidationInController:(UIPopoverPresentationController *)popoverPresentationController {
popoverPresentationController.containerView.tintColor =
popoverPresentationController.presentedViewController.view.tintColor = [UIColor redColor];
}
如果您想完全控制弹出窗口,您可以通过validationPopupController:messageViewControllerForValidationStatus:
方法提供自定义视图控制器(必须额外遵守MSXLFormValidationMessageViewController
)。
-(UIViewController<MSXLFormValidationMessageViewController> *)validationPopupController:(MSXLFormValidationPopupController * )popupController messageViewControllerForValidationStatus:(XLFormValidationStatus *)validationStatus {
return [[MyCustomViewController alloc] initWithStatus:validationStatus];
}
在这种情况下,您还可以为弹窗控制器提供自定义背景视图类。
-(Class)validationPopupController:(MSXLFormValidationPopupController *)popupController backgroundViewClassForValidationStatus:(XLFormValidationStatus *)validationSstatus {
return MyCustomBackgroundView.class;
}
MSXLFormValidationPopup遵循MIT许可。请参阅LICENSE文件以获取更多信息。