2015-10-14 2 views
1

В моем проекте используется XLForm и хочу отображать значение одной из строк в определенном формате.Как форматировать значение строки XLForm

Строка «Годовой оборот», и я хочу отобразить значение, введенное пользователем в качестве валюты - например, если пользователь вводит в поле формы, поле должно быть обновлено, чтобы отобразить это: $ 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; 

} 

Согласно the documentation, я должен поймать, что пользователь взаимодействует с полем, а затем изменить значение поля и обновления ряд.

Это, как я ловлю, что пользователь ввел что-то в поле:

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

делает' formRowDescriptorValueHasChanged' работу? – anhtu

+0

Он сообщает вам, какой rowDescriptor изменился, поэтому на основе этого вы можете делать все. Я использовал его, чтобы скрыть/отобразить другую строку, основанную на выборе одной строки. – marienke

+0

Да. Я знаю. Я имею в виду, что ваш код работает нормально? 'rowDescriptor8AnnualTurnover.value = [NSString stringWithFormat: @" R% @ ", yearTurnoverValue]; // Это разрывы. – anhtu

ответ

1

Бесконечная петля создается путем сброса значения rowDescriptor в formRowDescriptorValueHasChanged.

Я решил эту проблему путем изменения formRowDescriptorValueHasChanged сначала проверить или нет уже начинает значение по rowDescriptor «s с символом валюты, и только добавить его, если он отсутствует:

-(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]; 
     }    
    }  
} 
Смежные вопросы