如果另一行的值发生更改,我将尝试动态地向XLForm添加新行。我记录了第一行的值,一切都很好,但没有添加该行。我把它搞了几个小时,运气不好。
这是我的代码:
- (void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor oldValue:(id)oldValue newValue:(id)newValue
{
[super formRowDescriptorValueHasChanged:rowDescriptor oldValue:oldValue newValue:newValue];
if ([rowDescriptor.tag isEqualToString:@"later"]){
if ([[newValue valueData] isEqualToNumber:@(1)] == YES){
NSLog(@"NEW VALUE %@", [newValue valueData]);
rowType:XLFormRowDescriptorTypeDateTimeInline
XLFormRowDescriptor *n = [XLFormRowDescriptor formRowDescriptorWithTag:@"time"
rowType:XLFormRowDescriptorTypeDateTimeInline
title:@"Date and Time"];
[self.formO addFormRow:n afterRow:rowDescriptor];
}
else if ([[newValue valueData] isEqualToNumber:@(0)] == NO){
[self.form removeFormRowWithTag:@"time"];
NSLog(@"NEW VALUE %@", [newValue valueData]);
}
}
}
这是框架http://cocoadocs.org/docsets/XLForm/2.1.0/Protocols/XLFormDescriptorCell.html
任何建议都会被强烈建议。
我想只有当"later"行的值为1时,您才想显示"time"行,对吧?这个问题可以在XLForm的3.0版本中更容易地解决。在这个版本中,每一行都有一个隐藏属性,所以如果你在定义表单时这样设置它,它应该可以工作:
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"time" rowType:XLFormRowDescriptorTypeDateTimeInline title:@"Date and time"];
row.hidden = [NSString stringWithFormat:@"$later != 1",];
您应该预先定义此行,而不必自己添加和删除它。