INSStackViewForms是由Michał Zaborowski为inspace.io编写的。
INSStackViewForms
是一个用于创建动态UIStackView表单的库。它从UIStackView继承而来。完全兼容Swift和Obj-C。该库的目标是从已定义的自定义视图中创建模块化表单。该库的主要优势是它使用UIStackView构建,这意味着我们不重用视图,因此您始终可以访问所有视图。
INSStackViewForms提供了一个非常强大的DSL(领域特定语言)用于创建表单。它在运行时跟踪此规范,并动态地更新UI。
如果您想支持iOS9(其中UIStackView不可用),解决方案是使用OAStackView。您只需将OAStackView
导入到项目中,所有魔法都会自动完成。
[self.stackFormView addSection:[INSStackFormSection sectionWithBuilder:^(INSStackFormSection *sectionBuilder) {
[sectionBuilder addItemWithBuilder:^(INSStackFormItem *builder) {
builder.itemClass = [CustomView class];
builder.userInteractionEnabled = NO;
builder.height = nil; // dynamic height
builder.configurationBlock = ^(CustomView *view) {
view.backgroundColor = [UIColor whiteColor];
};
}];
[sectionBuilder addItemWithBuilder:^(INSStackFormItem *builder) {
builder.itemClass = [INSStackFormViewLabelElement class];
builder.height = @50;
builder.title = @"Title of text label";
builder.configurationBlock = ^(INSStackFormViewLabelElement *view) {
view.backgroundColor = [UIColor whiteColor];
view.textLabel.textColor = [UIColor redColor];
};
builder.actionBlock = ^(INSStackFormViewLabelElement *view) {
NSLog(@"ACTION");
};
}];
[sectionBuilder addItemWithBuilder:^(INSStackFormItem *builder) {
builder.itemClass = [ActionView class];
builder.height = @50;
builder.configurationBlock = ^(ActionView *view) {
view.accesoryType = INSStackFormViewBaseElementAccessoryNone;
view.titleLabel.text = @"Click Me to remove section!";
};
builder.actionBlock = ^(INSStackFormViewBaseElement *view) {
NSArray *errors = nil;
if ([weakSelf.stackFormView validateDataItems:&errors]) {
[weakSelf.stackFormView removeSection:[weakSelf.stackFormView.sections firstObject] animated:YES completion:nil];
} else {
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Error" message:[errors firstObject] preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
[weakSelf dismissViewControllerAnimated:YES completion:nil];
}]];
[weakSelf presentViewController:alert animated:YES completion:nil];
}
};
builder.validationBlock = ^BOOL(__kindof UIView *view, INSStackFormItem *item, NSString **errorMessage) {
if (weakSelf.stackFormView.sections.count <= 1) {
*errorMessage = @"Please don't delete me !!!";
return NO;
}
return YES;
};
}];
}]];
INSStackViewForms
使用ARC。
MIT许可(MIT)
版权所有(c) 2016 inspace.io
在此特此授权任何人,免费获得此软件及其相关文档文件(“软件”)的副本(“软件”),在软件上进行处理,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、转让和/或销售软件副本的权利,以及允许向软件提供副本的个人从事此类活动,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的任何副本或主要内容中。
本软件按“现状”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和非侵权性。在任何情况下,作者或版权持有者均不对因使用或无法使用本软件而导致的任何索赔、损失或其他责任承担责任,无论其基于合同、侵权或其他原因,即使已被告知此类索赔、损失或其他可能的责任。