我有一个表格视图表单,用户应该在其中输入一些信息(问题和选项)。基本上,当用户点击最后一部分时,正在收集文本字段和其他元素。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section==0) {
AskCellQuestion *cell;
cell = [tableView dequeueReusableCellWithIdentifier:@"askQuestionCell"];
if (cell == nil) {
cell = [[AskCellQuestion alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"askQuestionCell"];
}
...
cell.questionText.delegate = cell;
return cell;
} else if (indexPath.section==1) {
if (indexPath.row < numberOfChoices) {
AskCellChoice *cell;
cell = [tableView dequeueReusableCellWithIdentifier:@"askChoiceCell"];
if (cell == nil) {
cell = [[AskCellChoice alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"askChoiceCell"];
}
...
cell.choiceText.delegate = cell;
...
return cell;
} else {
AskCellChoiceAdd *cell;
cell = [tableView dequeueReusableCellWithIdentifier:@"askChoiceAddCell"];
if (cell == nil) {
cell = [[AskCellChoiceAdd alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"askChoiceAddCell"];
}
return cell;
}
} else if (indexPath.section==2) {
...
}
// Configure the cell...
return 0;
}
在didSelectRowAtIndexPath
函数中,我正在尝试访问这些文本字段并获取其值:
UITableView * questionFormView = [self tableView];
AskCellQuestion * questionCell = (AskCellQuestion *)[questionFormView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
NSString * questionText = questionCell.questionText.text;
NSLog(@"TXt: %@",questionText);
UIImage * questionImage = questionCell.questionImage;
NSLog(@"IMG: %@",questionImage);
NSString * questionVideo = questionCell.youtubeVideoID;
NSLog(@"VID: %@",questionVideo);
for (int i = 0; i < numberOfChoices; i++) {
AskCellChoice * choiceCell = (AskCellChoice *)[questionFormView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:1]];
NSLog(@"C TXt: %@",choiceCell.choiceText.text);
NSLog(@"C IMG: %@",choiceCell.choiceImage);
NSLog(@"C VID: %@",choiceCell.youtubeVideoID);
}
它在控制台中提供此输出:
2012-03-17 01:04:46.700 x[2346:207] TXt: (null)
2012-03-17 01:04:46.701 x[2346:207] IMG: (null)
2012-03-17 01:04:46.701 x[2346:207] VID: (null)
2012-03-17 01:04:46.701 x[2346:207] C TXt: TEST CHOICE 1
2012-03-17 01:04:46.701 x[2346:207] C IMG: <UIImage: 0x6ec75f0>
2012-03-17 01:04:46.702 x[2346:207] C VID: FMij4sZioBM
2012-03-17 01:04:46.702 x[2346:207] C TXt: TEST CHOICE 2
2012-03-17 01:04:46.702 x[2346:207] C IMG: <UIImage: 0x6e7ce30>
2012-03-17 01:04:46.702 x[2346:207] C VID: GfIcEzFzqKE
简而言之,我无法访问第0节中的文本字段。我尝试添加第二行,它也返回null。我尝试交换问题和选择单元格的部分,那时它为第0部分返回null,这对应于选择。问题细胞运作良好。我也试过增加部分编号,所以问题单元格在第1部分,选择是第2部分等...然后它返回第1部分的null。我无法弄清楚发生了什么,这是一个非常奇怪的问题。
顺便说一下,当didSelectRowAtIndexPath
等于第0节中行的索引路径时,我可以访问indexPath
中的单元格。但是当它不是时,它会在我{{{}}时返回null 1}}。
例如[NSIndexPath indexPathForRow:0 inSection:0]
:
didSelectRowAtIndexPath
当我将'fooBar'写入第0部分中的问题输入并单击第4部分的单元格('询问'按钮)时,给出此输出:
if (indexPath.section==4) {
NSLog(@"TEST 1 - %@", ((AskCellQuestion *)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]).questionText.text);
//[self askTheQuestion];
} else if (indexPath.section==0) {
NSLog(@"TEST 2 - %@", ((AskCellQuestion *)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]).questionText.text);
NSLog(@"TEST 3 - %@", ((AskCellQuestion *)[tableView cellForRowAtIndexPath:indexPath]).questionText.text);
}
并在我点击第0部分的单元格时给出这个,这是带有问题输入的单元格:
2012-03-17 01:38:47.125 x2516:207] TEST 1 - (null)
提前致谢...
答案 0 :(得分:1)
我想按下添加单元格(indexPath section == 1,row == numberOfChoices),第0行第0行的单元格在屏幕外。据我了解UITableViews,UITableViewCells正在被重用。通常,如果单元格位于屏幕之外,则它将进入可重用的池中。 (如果我错了,请纠正我。)在屏幕外调用一个单元格可能会也可能不会给出正确的值。我建议将值存储在其他地方的单元格中(如@property
),以便稍后检索它们。