使用tableviewcell UITextfield的输入构建一个数组

时间:2012-12-19 20:59:11

标签: objective-c ios xcode

我有一个动态数量的单元格的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的数量。

感谢。

2 个答案:

答案 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;
}