我有一個使用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
我剛剛試過,結果是一樣的。我開始認爲當行被填充時字典沒有被更新。 – madgrand 2015-02-12 06:52:01
@madgrand我更新了我的原始答案,以說明如何使用委託來完成它。我不知道爲什麼你要在你給的例子中添加行(我假設這行已經被添加了)。 – psobko 2015-02-12 17:32:45
感謝您的回覆。我嘗試了你的建議並使用它,但仍然無法實現它的工作。我在這個問題中增加了這個功能。我擔心該函數不會將您設置的值與行的值相關聯。有什麼建議彌合這一差距? – madgrand 2015-02-12 19:05:18