2015-02-11 15 views
0

我有一個使用xlform設置的部分,其中有一個布爾字段,然後是其下的文本字段。如果選擇了布爾,我想禁用文本字段。我嘗試了以下,但它沒有工作在xlform上禁用行條件

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

有什麼建議嗎? Here is的文檔,花了一堆時間搜索,卻無法找到答案。

編輯:我開始認爲字典的值不會動態更新。這很奇怪,因爲字典可以隨時在視圖控制器的其他部分訪問。

編輯

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

我懂了工作,但我有一個新的問題。

下面是代碼 - (空)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]; 
} 




} 

當我點擊第一行(現),它會禁用相應的行,但是當我點擊第二行(付款)時,它會使現在禁用的行重新出現並使我想要在付款下出現的行消失。

編輯得到它通過改變動畫UITableViewRowAnimationNone

回答

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

+0

我剛剛試過,結果是一樣的。我開始認爲當行被填充時字典沒有被更新。 – madgrand 2015-02-12 06:52:01

+0

@madgrand我更新了我的原始答案,以說明如何使用委託來完成它。我不知道爲什麼你要在你給的例子中添加行(我假設這行已經被添加了)。 – psobko 2015-02-12 17:32:45

+0

感謝您的回覆。我嘗試了你的建議並使用它,但仍然無法實現它的工作。我在這個問題中增加了這個功能。我擔心該函數不會將您設置的值與行的值相關聯。有什麼建議彌合這一差距? – madgrand 2015-02-12 19:05:18