在 xlform 上根据条件禁用行
disabling rows on condition on xlform
我使用 xlform 设置了一个部分,其中有一个 bool 字段,然后是它下面的一个文本字段。如果选择了 bool,我想禁用文本字段。我尝试了以下方法,但没有用
if ([[self.form valueForKey:@"pay"] isEqualToValue:@(1)]){
row.disabled = YES;
} else {
row.required = YES;
}
[section addFormRow:row];
有什么建议吗? Here is文档,找了好久都没找到答案。
编辑: 我开始认为字典的值不会动态更新。这很奇怪,因为可以随时在视图控制器的其他部分访问字典。
编辑
- (void)formRowDescriptorValueHasChangedTwo:(XLFormRowDescriptor *)formRow value:(id)value
{
[value isEqual:[self.formValues valueForKey:@"pay"]];
if([formRow.tag isEqualToString:@"pay"] && [value isEqual:[NSNumber numberWithBool:YES]])
{
self.price.disabled = NO;
self.price.required = YES;
[self.tableView reloadRowsAtIndexPaths:@[[self.form indexPathOfFormRow:self.price]]
withRowAnimation:UITableViewRowAnimationNone];
}
}
我成功了,但是我遇到了一个新问题。
这是代码
- (void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)formRow oldValue:(id)oldValue newValue:(id)newValue
{
if([formRow.tag isEqualToString:@"now"] && [newValue isEqual:[NSNumber numberWithBool:YES]])
{
self.time.disabled = YES;
[self.tableView reloadRowsAtIndexPaths:@[[self.form indexPathOfFormRow:self.time]]
withRowAnimation:UITableViewRowAnimationAutomatic];
}
if([formRow.tag isEqualToString:@"pay"] && [newValue isEqual:[NSNumber numberWithBool:YES]])
{
self.price.disabled = NO;
self.price.required = YES;
[self.tableView reloadRowsAtIndexPaths:@[[self.form indexPathOfFormRow:self.price]]
withRowAnimation:UITableViewRowAnimationAutomatic];
}
}
当我点击第一行(现在)时,它禁用了相应的行,但是当我点击第二行(付费)时,它使现在禁用的行重新出现并且它使我想出现在付费消失。
编辑 通过将动画更改为 UITableViewRowAnimationNone
让它工作
以下是使用 XLFormDescriptorDelegate
的方法。当字段在表单上切换时,这将更改状态。
@interface SomeClass() <XLFormDescriptorDelegate>
@end
@implementation SomeClass
- (void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)formRow oldValue:(id)oldValue newValue:(id)newValue
{
if([formRow.tag isEqualToString:@"boolFieldTag"] && [newValue boolValue])
{
self.otherRow.disabled = YES;
[self.tableView reloadRowsAtIndexPaths:@[[self.form indexPathOfFormRow:self.otherRow]]
withRowAnimation:UITableViewRowAnimationNone];
}
}
@end
在这个例子中,当我最初将它添加到表单时,我将该行设置为 属性。或者你可以只使用:[self.form formRowWithTag:@"someTag"]
我使用 xlform 设置了一个部分,其中有一个 bool 字段,然后是它下面的一个文本字段。如果选择了 bool,我想禁用文本字段。我尝试了以下方法,但没有用
if ([[self.form valueForKey:@"pay"] isEqualToValue:@(1)]){
row.disabled = YES;
} else {
row.required = YES;
}
[section addFormRow:row];
有什么建议吗? Here is文档,找了好久都没找到答案。
编辑: 我开始认为字典的值不会动态更新。这很奇怪,因为可以随时在视图控制器的其他部分访问字典。
编辑
- (void)formRowDescriptorValueHasChangedTwo:(XLFormRowDescriptor *)formRow value:(id)value
{
[value isEqual:[self.formValues valueForKey:@"pay"]];
if([formRow.tag isEqualToString:@"pay"] && [value isEqual:[NSNumber numberWithBool:YES]])
{
self.price.disabled = NO;
self.price.required = YES;
[self.tableView reloadRowsAtIndexPaths:@[[self.form indexPathOfFormRow:self.price]]
withRowAnimation:UITableViewRowAnimationNone];
}
}
我成功了,但是我遇到了一个新问题。
这是代码 - (void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)formRow oldValue:(id)oldValue newValue:(id)newValue {
if([formRow.tag isEqualToString:@"now"] && [newValue isEqual:[NSNumber numberWithBool:YES]])
{
self.time.disabled = YES;
[self.tableView reloadRowsAtIndexPaths:@[[self.form indexPathOfFormRow:self.time]]
withRowAnimation:UITableViewRowAnimationAutomatic];
}
if([formRow.tag isEqualToString:@"pay"] && [newValue isEqual:[NSNumber numberWithBool:YES]])
{
self.price.disabled = NO;
self.price.required = YES;
[self.tableView reloadRowsAtIndexPaths:@[[self.form indexPathOfFormRow:self.price]]
withRowAnimation:UITableViewRowAnimationAutomatic];
}
}
当我点击第一行(现在)时,它禁用了相应的行,但是当我点击第二行(付费)时,它使现在禁用的行重新出现并且它使我想出现在付费消失。
编辑 通过将动画更改为 UITableViewRowAnimationNone
让它工作以下是使用 XLFormDescriptorDelegate
的方法。当字段在表单上切换时,这将更改状态。
@interface SomeClass() <XLFormDescriptorDelegate>
@end
@implementation SomeClass
- (void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)formRow oldValue:(id)oldValue newValue:(id)newValue
{
if([formRow.tag isEqualToString:@"boolFieldTag"] && [newValue boolValue])
{
self.otherRow.disabled = YES;
[self.tableView reloadRowsAtIndexPaths:@[[self.form indexPathOfFormRow:self.otherRow]]
withRowAnimation:UITableViewRowAnimationNone];
}
}
@end
在这个例子中,当我最初将它添加到表单时,我将该行设置为 属性。或者你可以只使用:[self.form formRowWithTag:@"someTag"]