Ios 在UITableViewCell中嵌套UITextField时出现问题

Ios 在UITableViewCell中嵌套UITextField时出现问题,ios,objective-c,uitableview,cocoa-touch,uitextfield,Ios,Objective C,Uitableview,Cocoa Touch,Uitextfield,我有一个数组,我们称之为itemsArray,它包含一个名为Item的类的实例。这些项具有长度、宽度和高度的属性itemsArray也嵌套在另一个类(inventory)中,该类还有一个名为activeItem的属性。基本上,activeItem是一个整数,返回一个值,该值对应于当时正在编辑的itemsArray中项的索引。因此,如果我想更新itemsArray中的第二个item,我会将activeItem设置为1并从那里开始 现在,我需要填充itemsArray中项目的长度、宽度和高度属性。为

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

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

- (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
,我看到,每当我编辑单元格时,它都会将
activeItem
设置为indexPath.row的值,这是绝对正确的。但是,当我还尝试在
activeItem
中记录
itemLength
的值时,会返回null值,直到我尝试在数组中记录最后一个项为止。一旦我这样做,不管我编辑哪个单元格,我都会得到该数组长度中最后一项的值


有人知道我做错了什么吗?我陷入了绝望。先谢谢你

如果您使用textfield的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对象。

如果您使用textfield的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对象。

如果您使用textfield的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对象。

如果您使用textfield的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对象。

这当然有助于保留数据。非常感谢。现在我唯一的问题是滚动会使我的文本视图消失:\n这当然有助于保留数据。非常感谢。现在我唯一的问题是滚动会使我的文本视图消失:\n这当然有助于保留数据。非常感谢。现在我唯一的问题是滚动会使我的文本视图消失:\n这当然有助于保留数据。非常感谢。现在我唯一的问题是滚动会使我的文本视图消失:\