gpt4 book ai didi

ios - Tableview [cell.contentview viewwithtag :] is returning nil

转载 作者:行者123 更新时间:2023-12-01 18:33:52 25 4
gpt4 key购买 nike

我有一个包含四个部分的表格 View ,第一部分有 7 行,前六行有一个文本字段,最后一行有两个文本字段

第 1 节

t1
t1
t1
t1
t1
t1
t1 t2

第 2 节

t1 t2
t1 t2//第二行文本字段放在第四行
t1 t2
t1 t2//第四行文本字段被放置在其他行中
t1 t2
t1 t2
t1 t2

第 3 节

t1 t2
t1 t2
t1 t2
t1 t2
t1 t2
t1 t2
t1 t2

第 4 节

t1
t1
t1
t1
t1
t1
t1
t1

第二和第三部分包含七行,每行有两个文本字段

第四部分有八行,每行包含一个文本字段我为所有文本字段分配了唯一标签

在 textFieldDidEndEditing 中,我将内容保存到适当索引中的数组中。

如果我在文本字段中输入数据后滚动表格 View 。某些文本字段位置已更改(即)第二行中的文本字段被放置在第三行中,类似地某些行被交换。

我为第一部分的前六行创建了 5 个单元格标识符,第二个用于第一部分的最后一行,其余三个单元格标识符用于其他部分。

当我滚动一些时候 cell.contentview viewWithtag 返回标签的 nil 值

我认为这是某些行中文本字段错误的原因。

如何纠正这个问题?

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

NSString *identifier;<bn>
UITableViewCellStyle style = UITableViewCellStyleDefault;<br>
BOOL selectable = NO;<br>

switch (indexPath.section)
{
case 0:
{
if(indexPath.row < 6)
identifier = @"firstsectionSixRows";
else
identifier = @"firstsectionLastRow";
break;
}
case 1:
identifier = @"secondsection";
break;
case 2:
identifier = @"thirdsection";
break;
case 3:
identifier = @"fourthsection";
break;

}

return [self createCellForIdentifier:identifier
tableView:tableView
indexPath:indexPath
style:style
selectable:selectable];

}

在 createCellForIdentifier 方法中
else if([identifier isEqualToString:@"secondsection"])
{
int TextTag = 8 + indexPath.row * 2;



UILabel *lblName = (UILabel*)[cell.contentView viewWithTag:10000];

lblName.text = [NSString stringWithFormat:@"G%d",indexPath.row + 1];

//NSLog(@"row = %d texttag = %d",indexPath.row,TextTag);

UITextField *txtFirst = (UITextField*) [cell.contentView viewWithTag:TextTag];

if([textFieldArray count] > 0)
{
if(![[textFieldArray objectAtIndex:TextTag] isEqualToString:@""])
{
if(txtFirst)
txtFirst.text = [NSString stringWithFormat:@"%@",[textFieldArray objectAtIndex:TextTag]];
else
NSLog(@"Textfield is nil \n tag = %d \n cell section = %d row = %d",TextTag,indexPath.section,indexPath.row);

}
}

UITextField *txtSecond = (UITextField*) [cell.contentView viewWithTag:TextTag + 1];


if([textFieldArray count] > 0)
{
if(![[textFieldArray objectAtIndex:TextTag + 1] isEqualToString:@""])
{
if(txtSecond)
txtSecond.text = [NSString stringWithFormat:@"%@",[textFieldArray objectAtIndex:TextTag + 1]];
else
NSLog(@"Textfield is nil \n tag = %d \n cell section = %d row = %d",TextTag + 1,indexPath.section,indexPath.row);
}
}
}

最佳答案

我遇到了同样的问题(奇怪的文字出现在这里和那里,文本字段交换内容等等)。

原来是我的问题是不断重新创建 UITableViewCells我一直在滚动 UITableView .我怀疑你的表格 View 很长,所以它不适合一个屏幕,所以你不能摆脱滚动。我也有UITextFields在我的UITableViewCells .

在我的情况下发生的事情是,一旦 UITextViewCell从屏幕上消失,它被释放(这发生在你的情况下,因为你使用的是单元格标识符,我明白了)。下次它出现在屏幕上时,它将重新使用以前的文本字段及其文本和设置。

我最终做的是检查 UITextFields 的创建量在细胞中。这些现在创建一次,并且在 UITableViewCell 期间保持静态。 ,也就是说,我不重新创建 UITextFields每次cellForRowAtIndexPath叫做。

我认为您应该注意的另一个问题是:

[UITableView cellForRowAtIndexPath:] 

..和..
[UITableViewDelegate tableView: cellForRowAtIndexPath:]

...是两个不同的功能,表现不同。我打错了,这给了我来自 [UIView viewWithTag:] 的零稍后的...

只是我的2欧分。

关于ios - Tableview [cell.contentview viewwithtag :] is returning nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4053541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com