在xlform上禁用行条件

时间:2015-02-11 22:07:39

标签: objective-c 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

来使其工作

1 个答案:

答案 0 :(得分:0)

以下是使用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”]