如何格式化XLForm行值

时间:2015-10-14 12:54:56

标签: ios objective-c xlform

我在项目中使用XLForm,并希望以特定格式显示其中一行的值。

该行是&#34;年营业额&#34;我希望将用户输入的值显示为货币 - 例如,如果用户在表单字段中输入 1000000 ,则应更新该字段以显示: $ 1,000,000.00 < /强>

我该怎么做?

这是在initializeForm()中初始化表单字段的方式:

element->next = list2->front;        
//for a double-linked list:
list2->front->prev = element;

根据the documentation,我应该注意到用户已经与字段进行了交互,然后更改了字段的值并更新了该行。

这就是我抓住用户在字段中输入内容的方式:

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

}

1 个答案:

答案 0 :(得分:2)

通过重置rowDescriptorformRowDescriptorValueHasChanged的值,创建了无限循环。

我通过更改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];
        }            
    }    
}