0

別の値が変更された場合、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

どんな提案でも大いに提案されます。

4

1 に答える 1

0

「後で」行の値が1の場合にのみ「時間」行を表示したいと思いますよね?この問題は、XLForm のバージョン 3.0 でより簡単に解決できます。そのバージョンでは、各行に非表示のプロパティがあるため、フォームを定義するときに次のように設定すると機能するはずです。

row = [XLFormRowDescriptor formRowDescriptorWithTag:@"time" rowType:XLFormRowDescriptorTypeDateTimeInline title:@"Date and time"];
row.hidden = [NSString stringWithFormat:@"$later != 1",];

この行は事前に定義する必要があり、自分で追加および削除する必要はありません。

于 2015-04-24T13:09:53.853 に答える