Iphone UITableView自定义单元格中存在问题
我正在尝试向UITableView中的单元格添加自定义标签。当我尝试这样做的时候,显示器是乱七八糟的,我无法弄清楚到底发生了什么。请找到下面的图片,我将发布我写的方法Iphone UITableView自定义单元格中存在问题,iphone,objective-c,uitableview,uilabel,Iphone,Objective C,Uitableview,Uilabel,我正在尝试向UITableView中的单元格添加自定义标签。当我尝试这样做的时候,显示器是乱七八糟的,我无法弄清楚到底发生了什么。请找到下面的图片,我将发布我写的方法 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITable
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
//cell.textLabel.font=[UIFont systemFontOfSize:16];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
NSString *contact=[contactKeys objectAtIndex:[indexPath section]];
NSArray *contactSection=[contactNames objectForKey:contact];
NSMutableArray *sugar=[db sugarId];
if (isSearchOn) {
NSString *cellValue = [searchResult objectAtIndex:indexPath.row];
NSArray *splitText = [cellValue componentsSeparatedByString:@":"];
NSString *contactText = [NSString stringWithFormat:@"%@ %@", [splitText objectAtIndex:1], [splitText objectAtIndex:0]];
//NSString *result=[contactText stringByAppendingString:[sugar objectAtIndex:[indexPath row]]];
firstLabel=[[[UILabel alloc]initWithFrame:CGRectMake(10, 10, 300, 40)]autorelease];
firstLabel.tag =40; //This should be a constant probably
firstLabel.font = [UIFont systemFontOfSize:[UIFont labelFontSize]];
firstLabel.text = contactText;
[firstLabel sizeToFit];
[cell.contentView addSubview:firstLabel];
sugarLabel = [[UILabel alloc] initWithFrame:
CGRectMake(10+firstLabel.frame.size.width+2, 10, 300, 60)];
sugarLabel.tag =40; //This should be a constant probably
//sugarLabel.font = [UIFont boldSystemFontOfSize:16];
sugarLabel.text = [sugar objectAtIndex:[indexPath row]];
[sugarLabel setHidden:YES];
[cell.contentView addSubview:sugarLabel];
cell.textLabel.text =firstLabel.text;
} else {
NSString *cellText = [contactSection objectAtIndex:[indexPath row]];
// split the text by the : to get an array containing { "AAA", "BBB" }
NSArray *splitText = [cellText componentsSeparatedByString:@":"];
// form a new string of the form "BBB AAA" by using the individual entries in the array
NSString *contactText = [NSString stringWithFormat:@"%@ %@", [splitText objectAtIndex:1], [splitText objectAtIndex:0]];
firstLabel=[[[UILabel alloc]initWithFrame:CGRectMake(10, 10, 300, 40)]autorelease];
firstLabel.tag =40; //This should be a constant probably
//firstLabel.font = [UIFont systemFontOfSize:[UIFont labelFontSize]];
firstLabel.text = contactText;
[firstLabel sizeToFit];
[cell.contentView addSubview:firstLabel];
sugarLabel = [[UILabel alloc] initWithFrame:
CGRectMake(10+firstLabel.frame.size.width+2, 10, 300, 60)];
sugarLabel.tag =40; //This should be a constant probably
//sugarLabel.font = [UIFont boldSystemFontOfSize:16];
sugarLabel.text = [sugar objectAtIndex:[indexPath row]];
[sugarLabel setHidden:YES];
[cell.contentView addSubview:sugarLabel];
NSString *result=[NSString stringWithFormat:@"%@ %@",firstLabel.text,sugarLabel.text];
cell.textLabel.text=result;
}
图2:这是对BP建议的代码的修改。结果显示在..
编辑:
每当我尝试编写stringWithFormat或上述语句时,内存都不会被释放,标签彼此重叠。有什么办法可以解决这个问题吗..请帮帮我..我花了半天的时间试图解决这个问题,但是运气不好如果您想要自定义单元格,我建议您使用UITableViewCell子类。在您给出的示例代码中,每当tableview要求单元格在索引路径中输入行时,您都会创建一个新标签。在自动删除它们的同时,还将它们添加到单元格的contentview中,这会增加它们的保留计数,并确保它们的生存期与tableview的一样长 当单元格被重用时,您将继续向其内容视图添加越来越多的标签,直到最终耗尽内存 至于奇怪的文本输出,看起来您正在使用format调用向其中一个字符串添加UILabel 如果您要执行下面的代码,您将看到类似的内容
UILabel*label=[[UILabel alloc]init]
NSLog(@“%@”,标签)
[标签发布]
编辑:看到编辑过的屏幕截图,我假设您已向下滚动到“S”部分。在这种情况下,您将看到标签位于其他标签之上。正如我提到的,您每次都要创建一个新标签,并将其放在第一次(以及第二次、第三次等)使用单元格时创建的标签的顶部。如果您想要自定义单元格,我建议您使用UITableViewCell子类。在您给出的示例代码中,每当tableview要求单元格在索引路径中输入行时,您都会创建一个新标签。在自动删除它们的同时,还将它们添加到单元格的contentview中,这会增加它们的保留计数,并确保它们的生存期与tableview的一样长 当单元格被重用时,您将继续向其内容视图添加越来越多的标签,直到最终耗尽内存 至于奇怪的文本输出,看起来您正在使用format调用向其中一个字符串添加UILabel 如果您要执行下面的代码,您将看到类似的内容
UILabel*label=[[UILabel alloc]init]
NSLog(@“%@”,标签)
[标签发布]
编辑:看到编辑过的屏幕截图,我假设您已向下滚动到“S”部分。在这种情况下,您将看到标签位于其他标签之上。正如我提到的,您每次都要创建一个新标签,并将其放在第一次(以及第二次、第三次等)使用单元格时创建的标签上。获取UILabel的原因:。。。显示的项是方法的最后一行,您可以在其中设置cell.textLabel.text。如果要创建包含自己字段的单元格,则不希望执行此操作。获取UILabel的原因:。。。显示的项是方法的最后一行,您可以在其中设置cell.textLabel.text。如果要创建包含自己字段的单元格,则不希望执行此操作
NSString *result=[NSString stringWithFormat:@"%@ %@",contactText,sugarLabel]
应改为:
NSString *result=[NSString stringWithFormat:@"%@ %@",contactText,sugarLabel.text]
您传入的是UILabel而不是NSString
编辑
尝试仅在if(cell==nil){
块中实例化和添加UILabel
在访问标签属性并在该块外写入时,是可以的
应改为:
NSString *result=[NSString stringWithFormat:@"%@ %@",contactText,sugarLabel.text]
您传入的是UILabel而不是NSString
编辑
尝试仅在if(cell==nil){
块中实例化和添加UILabel
当访问标签属性并在该块外写入时可以请查看编辑的方法和更新的屏幕截图..我希望sugarLabel被隐藏..即其值不应显示在表格单元格上..setHidden属性是否有效?请帮助不要将sugarLabel.text添加到字符串中,该字符串将以其他标签是我做的viking..谢谢你的帮助..但不知何故我正在一个接一个地添加标签..我刚刚更新了图2的屏幕截图我尝试了这么做,但一些单元格没有显示在表上..我看到一个空单元格..if(cell==nil){firstLabel=[[UILabel alloc]initWithFrame:cRectmake(10,10300,40)];sugarLabel=[[UILabel alloc]initWithFrame:cDirectMake(10+firstLabel.frame.size.width+2,10300,60)];单元格=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault重用标识符:CellIdentifier]autorelease];}是的,我终于完成了。我参考了Jerry建议的链接。非常感谢您的所有回复。请查看编辑的方法和更新的屏幕截图。我希望sugarLabel被隐藏。即,它的值不应显示在表格单元格上。setHidden属性有效吗?请帮助,因此您不应将sugarLabel.text添加到字符串中,即我将在另一个标签中显示是的,我做了那个viking..谢谢你的帮助..但不知怎的,我正在一个接一个地添加标签..我刚刚更新了图2的屏幕截图,我尝试了这么做,但一些单元格没有显示在表上..我看到一个空单元格..if(cell==nil){firstLabel=[[UILabel alloc]initWithFrame:cRectMake(10,10300,40)];sugarLabel=[[UILabel alloc]initWithFrame:cDirectMake(10+firstLabel.frame.size.width+2,10300,60)];cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault重用标识符:CellIdentifier]autorelease];}是的,最后我完成了……我提到了l