Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UITableView自定义单元格中存在问题_Iphone_Objective C_Uitableview_Uilabel - Fatal编程技术网

Iphone 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

我正在尝试向UITableView中的单元格添加自定义标签。当我尝试这样做的时候,显示器是乱七八糟的,我无法弄清楚到底发生了什么。请找到下面的图片,我将发布我写的方法

 - (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