我有一个数组,我们称之为itemsArray
,它包含一个名为Item.
的类的实例。这些items
具有长度,宽度和高度的属性。 itemsArray
也嵌套在另一个类(questionnaire
)中,该类也有一个名为activeItem
的属性。基本上,activeItem
是一个整数,它返回一个值,该值对应于当时正在编辑的item
中的itemsArray
的索引。因此,如果我想更新item
中的第二个itemsArray
,我会将activeItem
设置为1并从那里开始。
现在,我需要在itemsArray
中填充项目的长度,宽度和高度属性。为此,我正在创建一个带有自定义UITableViewCell的tableView。这个UITableViewCell,我们称之为CustomTableViewCell,
有3个UITextField属性,对应于我放在故事板上的3个UITextField,lengthField
,widthField
和heightField
。我在输入要输入文本字段的值时遇到一些问题,以便与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
的值时,我会返回空值,直到我尝试在数组中记录最后一项。一旦我这样做,无论我编辑哪个单元格,我都得到该数组长度中最后一项的值。
有没有人知道我在这里做错了什么?我无可救药地被困住了。先感谢您。
答案 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对象。