将UITextField嵌套在UITableViewCell中的问题

时间:2015-02-03 13:48:25

标签: ios objective-c uitableview cocoa-touch uitextfield

我有一个数组,我们称之为itemsArray,它包含一个名为Item.的类的实例。这些items具有长度,宽度和高度的属性。 itemsArray也嵌套在另一个类(questionnaire)中,该类也有一个名为activeItem的属性。基本上,activeItem是一个整数,它返回一个值,该值对应于当时正在编辑的item中的itemsArray的索引。因此,如果我想更新item中的第二个itemsArray,我会将activeItem设置为1并从那里开始。

现在,我需要在itemsArray中填充项目的长度,宽度和高度属性。为此,我正在创建一个带有自定义UITableViewCell的tableView。这个UITableViewCell,我们称之为CustomTableViewCell,有3个UITextField属性,对应于我放在故事板上的3个UITextField,lengthFieldwidthFieldheightField。我在输入要输入文本字段的值时遇到一些问题,以便与item的相应实例一起存储。这是一些代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    self.cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"quantityCell"];
    [self.cell.lengthField addTarget:self action:@selector(lengthEdited:) forControlEvents:UIControlEventEditingChanged];
    return self.cell; 
}

- (void)lengthEdited:(id)sender{
CGPoint position = [sender convertPoint:CGPointZero toView:self.quantityTableView];
NSIndexPath *indexPath = [self.quantityTableView indexPathForRowAtPoint:position];
[questionnaire setActiveItem: indexPath.row]; 
[[questionnaire.itemsArray objectAtIndex:activeItem]setItemLength self.cell.lengthField.text];
}

为简单起见,尺寸可以存储为字符串。现在,我在运行时添加了item的实例,我之后不久就尝试编辑这些实例的维度,但是当我尝试这样做时,只有tableView中的最后一个对象似乎正确响应。我已经对activeItem进行了NSLog,我看到,每当我编辑一个单元格时,它都会将activeItem设置为indexPath.row的值,这绝对是正确的。但是,当我在itemLength中尝试NSLog activeItem的值时,我会返回空值,直到我尝试在数组中记录最后一项。一旦我这样做,无论我编辑哪个单元格,我都得到该数组长度中最后一项的值。

有没有人知道我在这里做错了什么?我无可救药地被困住了。先感谢您。

1 个答案:

答案 0 :(得分:3)

如果你使用像

这样的文本字段的Tag属性,这可以更简单
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    self.cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"quantityCell"];
    [self.cell.lengthField setTag:indexPath.row];
    [self.cell.lengthField addTarget:self action:@selector(lengthEdited:) forControlEvents:UIControlEventEditingChanged];
    return self.cell; 
}

然后你可以像

那样做
- (void)lengthEdited:(id)sender{

   UITextField *lengthTextField = (UITextField*)sender;
   NSInteger tag = lengthTextField.tag;
   [questionnaire setActiveItem: tag]; 
   [[questionnaire.itemsArray objectAtIndex:tag]setItemLength: lengthTextField.text];
}

但是为此你应该在活动索引中有正确的Item对象。