1

我正在使用内联 datePicker 选择日期(dd/mm/yyyy)。这是一个生日,如果日期小于 [NSDate date] 减去 18 年,我必须显示一个表格行。

而且我完全为显示或隐藏行的谓词而苦苦挣扎:x

这是我用来设置如果用户小于 18 岁我需要隐藏的行的代码

XLFormRowDescriptor *row = [XLFormRowDescriptor formRowDescriptorWithTag:kAuthorization rowType:MyXLFormDescriptionTypeCheck title:@"Parents authorization"]];

row.hidden = [NSString stringWithFormat:@"$%@.value >= CAST(%f, 'NSDate')", kDateOfBirth, [eighteenYearsAgo timeIntervalSince1970]];

[section addFormRow:row];

当我运行我的应用程序时,一个断点会在 XLFormRowDescriptor.m 处停止执行(第 342 行)

其中 : self 是实际行,_hidden 等于 "$birthday.value >= CAST(881190000.000000, "NSDate")" 和 self.sectionDescriptor.formDescriptor.allRowsByTag 是 nil 因为 self.sectionDescriptor 也是 nil

这是 @catch 块中 NSException 的描述:

无法在绑定 {} 中获取“生日”的值。

谢谢你的帮助\o

4

1 回答 1

2

通过绕过问题,我找到了完成这项工作的解决方案。

我重写了方法

- [id<XLFormDescriptorDelegate> formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)formRow oldValue:(id)oldValue newValue:(id)newValue];

这样当行的值发生变化时我会收到通知。我只是在这里进行比较并根据结果隐藏或显示我想要的行。

如果有人遇到同样的问题,我认为这个解决方案很棒,设置时间不贵(不需要 NSPredicate 或正则表达式技能,只需要一种覆盖方法),而且不是很脏(代码可读,解决方案不是一个大把戏):)

于 2015-12-07T11:50:54.520 回答