2017-10-16 38 views
0

我可能需要一些幫助。XLForm - 如何隱藏一行取決於另一行的值?

我在我的Objective-C項目中使用XLForm。我有一個選擇器的第一行,你有四個不同的選項。然後有第二個選擇器。但是第二個選擇器只能在第一個選擇器中選擇特定值時纔可用。

我知道有一個關於github網站的描述,但我真的不知道該怎麼做。所以請幫助我做到這一點。

這裏是我的代碼的相關部分:

row = [XLFormRowDescriptor formRowDescriptorWithTag:@"repeat" rowType:XLFormRowDescriptorTypeSelectorPickerViewInline title:@"Wiederholen:" ]; 
row.cellClass = [LehrerXLFormInlineSelectorCell class]; 

NSMutableArray *selectionArray = [NSMutableArray array]; 

for (NSNumber *item in [APIDataReplacement appointmentRepeatingList]) { 
    NSString *title = [APIDataReplacement appointmentRepeatingToString:item.intValue]; 
    [selectionArray addObject:[XLFormOptionsObject formOptionsObjectWithValue:item displayText:title]]; 
} 

row.selectorOptions = selectionArray; 
if ([selectionArray count] == 0) { 
    [row setDisabled:@YES]; 
} 

if (aItem) { 

    int repeatingID = [[aItem appointmentRepeatingId] intValue]; 
    NSString *title = [APIDataReplacement appointmentRepeatingToString:repeatingID]; 
    row.value = [XLFormOptionsObject formOptionsObjectWithValue:[NSNumber numberWithInt:repeatingID] displayText:title]; 

}else{ 

    NSNumber *first = [[APIDataReplacement appointmentRepeatingList] firstObject]; 
    NSString *title = [APIDataReplacement appointmentRepeatingToString:first.intValue]; 
    row.value = [XLFormOptionsObject formOptionsObjectWithValue:first displayText:title]; 
} 

[section addFormRow:row]; 


section = [XLFormSectionDescriptor formSectionWithTitle:@""]; 
[form addFormSection:section]; 


row = [XLFormRowDescriptor formRowDescriptorWithTag:@"weekday" rowType:XLFormRowDescriptorTypeSelectorPickerViewInline title: @"Wochentag:"]; 
row.cellClass = [LehrerXLFormInlineSelectorCell class]; 

NSMutableArray *selectionArray1 = [NSMutableArray array]; 

for (NSNumber *item in [APIDataReplacement dayList]) { 
    NSString *title = [APIDataReplacement dayToString:item.intValue]; 
    [selectionArray1 addObject:[XLFormOptionsObject formOptionsObjectWithValue:item displayText:title]]; 
} 

row.selectorOptions = selectionArray1; 

if (aItem) { 

    // AppointmentRepeating *currentRepeat = [aItem appointmentRepeating]; 
    int dayID = [[aItem startday] intValue]; 
    NSString *title = [APIDataReplacement dayToString:dayID]; 
    row.value = [XLFormOptionsObject formOptionsObjectWithValue:[NSNumber numberWithInt:dayID] displayText:title]; 

}else{ 

    NSNumber *first = [[APIDataReplacement dayList] firstObject]; 
    NSString *title = [APIDataReplacement dayToString:first.intValue]; 
    row.value = [XLFormOptionsObject formOptionsObjectWithValue:first displayText:title]; 
} 

[section addFormRow:row]; 


section = [XLFormSectionDescriptor formSectionWithTitle:@""]; 
[form addFormSection:section]; 

這是兩個採摘。我認爲我應該在formRowDescriptorValueHasChanged方法中做一些事情,但我不知道是什麼。如果第一個選擇器的值爲「20」,那麼應該隱藏第二個選擇器。

非常感謝您的幫助。

回答

0

關於你的第二XLFormRowDescriptor你應該:

secondRow.hidden = [NSString stringWithFormat:@"$%@ == 20", firstRow]; 

firstRow是第一XLFormRowDescriptor

這實際上創建了一個NSPredicate,只要值發生更改並適當設置可見性,就會自動評估它。

從XLForm的例子摘自:

例如,你可以在下面的字符串設定爲行(秒) 讓它消失,當從前一行(第一)的值爲 「隱藏」。

second.hidden = [NSString stringWithFormat:@"$%d contains[c] 'hide'", [first.value intValue]];

編輯:我改變了謂詞的NSNumber值工作。

相關問題