0

bool フィールドとその下のテキスト フィールドがある xlform を使用してセクションを設定しました。ブールが選択されている場合、テキスト フィールドを無効にしたい。以下で試してみましたが、うまくいきませんでした

if ([[self.form valueForKey:@"pay"] isEqualToValue:@(1)]){
    row.disabled = YES;
} else {
    row.required = YES;
}
[section addFormRow:row];

助言がありますか?これがドキュメントです。答えを見つけることができずに検索に多くの時間を費やしました。

編集:辞書の値が動的に更新されないと思い始めています。ビューコントローラーの他の部分でいつでも辞書にアクセスできるため、これは奇妙です。

編集

- (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];
}




}

最初の行をクリックすると(今)、対応する行が無効になりますが、2行目(有料)をクリックすると、無効になっている行が再表示され、支払いの下に表示したい行が表示されます消えるために。

編集アニメーションを UITableViewRowAnimationNone に変更することで動作するようになりました

4

1 に答える 1

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"]

于 2015-02-11T23:51:25.223 に答える