1

プロジェクトでXLFormを使用しており、行の 1 つの値を特定の形式で表示したいと考えています。

行は「年間売上高」であり、ユーザーが入力した値を通貨として表示したい - たとえば、ユーザーがフォーム フィールドに1000000を入力した場合、フィールドを更新して次のように表示する必要があります: $ 1,000,000.00

それ、どうやったら出来るの?

これは、initializeForm() でフォーム フィールドを初期化する方法です。

-(void)initializeForm
{

    // Other fields in the form...

    // Annual turnover Section
    self.section = [XLFormSectionDescriptor formSectionWithTitle:formLabel8AnnualTurnover];
    //section.footerTitle = @"Describe new products";
    [self.formDescriptor addFormSection:self.section];

    // Annual turnover
    self.row = [XLFormRowDescriptor formRowDescriptorWithTag:formField8AnnualTurnover rowType:XLFormRowDescriptorTypeText title:nil];
    self.row.required = NO;
    rowDescriptor8AnnualTurnover = self.row;
    [self.section addFormRow:self.row];

    // Other fields in the form...

    self.form = self.formDescriptor;

}

ドキュメントによると、ユーザーがフィールドを操作したことをキャッチし、フィールドの値を変更して行を更新する必要があります。

これは、ユーザーがフィールドに何かを入力したことをキャッチする方法です。

-(void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor oldValue:(id)oldValue newValue:(id)newValue
{
        [super formRowDescriptorValueHasChanged:rowDescriptor oldValue:oldValue newValue:newValue];

        // Get the current form values
        formValues = [self.form formValues];

        int i = 0;

        if ([rowDescriptor.tag hasPrefix:formField8AnnualTurnover]){
                NSString *annualTurnoverValue = [(XLFormOptionsObject*)formValues[formField8AnnualTurnover] displayText];
                rowDescriptor8AnnualTurnover.value = [NSString stringWithFormat:@"R %@", annualTurnoverValue]; //This breaks.
                [self reloadFormRow:rowDescriptor8AnnualTurnover];
            }    
}
4

1 に答える 1

2

rowDescriptorinの値をリセットすることにより、無限ループが作成されていましたformRowDescriptorValueHasChanged

の値がすでに通貨記号で始まっているformRowDescriptorValueHasChangedかどうかを最初に確認し、それがない場合にのみ追加するように変更することで、この問題を解決しました。rowDescriptor

-(void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor oldValue:(id)oldValue newValue:(id)newValue
{

   [super formRowDescriptorValueHasChanged:rowDescriptor oldValue:oldValue newValue:newValue];

   // Get the current form values
   formValues = [self.form formValues];
   if ([rowDescriptor.tag hasPrefix:formField8AnnualTurnover]){
        NSString *annualTurnoverValue = [(XLFormOptionsObject*)formValues[formField8AnnualTurnover] displayText];
        if([annualTurnoverValue hasPrefix:@"R "]){
            // Do nothing - the value will simply be increased.
        }else{
            rowDescriptor8AnnualTurnover.value = [NSString stringWithFormat:@"R %@", annualTurnoverValue];
            [self reloadFormRow:rowDescriptor8AnnualTurnover];
        }            
    }    
}
于 2015-10-19T08:33:24.303 に答える