在 UITableViewCell 中嵌套 UITextField 的问题
Problems Nesting UITextField within UITableViewCell
我有一个数组,我们称之为 itemsArray
,它包含一个名为 Item.
的 class 的实例,这些 items
具有长度、宽度、和身高。 itemsArray
也嵌套在另一个 class (questionnaire
) 中,后者也有一个名为 activeItem
的 属性。基本上,activeItem
是一个整数,returns 一个值对应于当时正在编辑的 itemsArray
中的 item
的索引。因此,如果我想更新 itemsArray
中的第二个 item
,我会将 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 中的最后一个对象能够正确响应.我有 NSLog'd activeItem
,我看到,每当我编辑一个单元格时,它都会将 activeItem
设置为 indexPath.row 的值,这是绝对正确的。但是,当我还尝试 NSLog activeItem
中 itemLength
的值时,我得到返回的空值,直到我尝试记录数组中的最后一项。一旦我这样做了,无论我编辑哪个单元格,我都会得到该数组长度中最后一项的值。
有人知道我在这里做错了什么吗?我无可救药地卡住了。先感谢您。
如果你使用像
这样的文本字段的标签属性,这会更简单
- (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 对象。
我有一个数组,我们称之为 itemsArray
,它包含一个名为 Item.
的 class 的实例,这些 items
具有长度、宽度、和身高。 itemsArray
也嵌套在另一个 class (questionnaire
) 中,后者也有一个名为 activeItem
的 属性。基本上,activeItem
是一个整数,returns 一个值对应于当时正在编辑的 itemsArray
中的 item
的索引。因此,如果我想更新 itemsArray
中的第二个 item
,我会将 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 中的最后一个对象能够正确响应.我有 NSLog'd activeItem
,我看到,每当我编辑一个单元格时,它都会将 activeItem
设置为 indexPath.row 的值,这是绝对正确的。但是,当我还尝试 NSLog activeItem
中 itemLength
的值时,我得到返回的空值,直到我尝试记录数组中的最后一项。一旦我这样做了,无论我编辑哪个单元格,我都会得到该数组长度中最后一项的值。
有人知道我在这里做错了什么吗?我无可救药地卡住了。先感谢您。
如果你使用像
这样的文本字段的标签属性,这会更简单- (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 对象。