我有一个动态数量的单元格的tableview,基于一个由JSON构建的数组。
tableData = [NSJSONSerialization JSONObjectWithData:dataWebService options:kNilOptions error:&error];
这个小行获取构建我的tableview所需的所有数据。
在tableview中,我在每个单元格中都有一个文本字段,其中包含来自我的JSON的预定义文本。用户可以在进入下一个segue(故事板)之前更改此值。
问题是我如何在数组中存储这个usertyped值,在我将这个arraobject发送到下一个segue之前替换我的tableData
数组中的excisting值。
请记住,当用户在tableview中滚动时,用户输入不得更改。
也许这是基本的,但我无法想出一个很好的方法来做到这一点。
这是JSON的一个例子。
(
{
defaultval = 8;
dtype = long;
id = "@franr";
label = "Faktura nr.";
},
{
defaultval = 8;
dtype = long;
id = "@tilnr";
label = "Til faktura";
}
tableview看起来像这样: (我无法发布图片)
Fra faktura 8 Til faktura 8用户可以将值(数字8)更改为任何数字。所以我需要在我的JSON数组中替换defaultVal的数量。
感谢。
答案 0 :(得分:0)
由于它是UITEXTFIELD,您可以使用OnTextChange事件
[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
或
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
,或失去焦点
- (BOOL)textFieldShouldReturn:(UITextField *)textField
请记住,您需要将文本字段的代理设置为self&添加相应的protocals。
答案 1 :(得分:0)
为了在滚动后保留数据,您应该在用户每次输入后修改数据源(数组)。您可以在UITextFieldDelegate的textFieldDidEndEditing:
方法中执行dis(当然,您必须是每个文本字段的委托:textField.delegate = self;
)。
您还应该实现一个UIScrollViewDelegate方法,用于在表开始滚动时解除键盘(例如scrollViewWillBeginDragging:
)。
修改强>
您的数组必须包含NSDictionaries,这些NSDictionaries不可变,所以我建议您创建自己的具有这些属性的类(defaultval,dtype ...),这样您就可以编辑数据源。我认为你不能像现在这样修改数组。
具有自定义对象的代码类似于:
- (void)textFieldDidEndEditing:(UITextField *)textField {
UITableViewCell *cell = textField.superview.superview;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
MyObject *currentObject = [tableData objectAtIndex:indexPath.row];
currentObject.defaultVal = textField.text.intValue;
}