自定义uitableviewcell的问题

时间:2011-08-25 21:27:54

标签: iphone ios uitableview uilabel

过去几天我一直在玩桌面视图,试图习惯他们,今天我一直在尝试创建一个自定义的uitableviewcell,我正在使用Apple文档中的Table View编程指南工作,这有点奇怪我想要做的事情的问题。

我已经设置了一个自定义单元格nib文件,它上面有两个标签,它们都有标签(0和1)我已经将File owner类更改为将使用它的nib。

从那里我开始编写tableView:cellForRowAtIndexPath:方法,在tableview中显示我的自定义单元格,但正如您将看到的那样,当我为其分配字符串时,只显示我的第一个标签,我只是不知道为什么。 ..

自定义单元格笔尖 enter image description here

tableView:cellForRowAtIndexPath:method

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *CellIdentifier = @"Cell";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            //cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier] autorelease];
            [[NSBundle mainBundle] loadNibNamed:@"ManufactureSearchCell" owner:self options:nil];
            cell = vehicleSearchCell;
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
            self.vehicleSearchCell = nil;
        }
        // Configure the cell...
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        if(indexPath.section == 0)
        {
            if(indexPath.row == 0)
            {
                UILabel *label;
                label = (UILabel *)[cell viewWithTag:0];
                label.text = [[NSString alloc] initWithString:@"Manufacture :"];

                label = (UILabel *)[cell viewWithTag:1];
                label.text = [[NSString alloc] initWithString:@"empty"];
            }
            else if(indexPath.row == 1)
            {
//.....

任何帮助将不胜感激:)

3 个答案:

答案 0 :(得分:5)

请注意使用viewWithTag和0.这是所有视图的默认标记,因此请仔细检查您实际上是从中获取标签,而不是单元格的背景视图,附件视图或添加到其他任何其他默认视图细胞。它可能会导致问题。

如果您正在重用该单元格,我建议您创建一个自定义UITableViewCell子类并通过IB链接它们。如果你没有重复使用那个单元格,并希望它只显示一次,那么肯定会采用Karoly的建议将这些标签作为IBOutlets。

答案 1 :(得分:0)

我只看到提供给我的代码中的一件事。看起来你正在覆盖你的标签价值。两者中哪一个显示出来?

UILabel *label1;
label = (UILabel *)[cell viewWithTag:0];
label.text = [[NSString alloc] initWithString:@"Manufacture :"];

UILabel *label2
label2 = (UILabel *)[cell viewWithTag:1];
label2.text = [[NSString alloc] initWithString:@"empty"];

我会为了简单起见而宣布两个标签。或者你已经这样做了吗?其他一切都在运作吗?你是以编程方式创建这些标签吗?如果不是,为什么不通过IB连接它们并给它们唯一的名称并以这种方式访问​​它们?你的CellViewStyle是什么设置的?看起来你有一条线可以将它设置为注释掉的东西,有什么特别的原因吗?您还可以在自定义单元格的.xib文件中检查您的属性,看看是否有需要更改的内容。

答案 2 :(得分:0)

这让我感到奇怪 - 为什么使用

label.text = [[NSString alloc] initWithString:@"Manufacture :"];

而不是

label.text = @"Manufacture :";

就是这样,你不释放你的琴弦。使用@“xxx”短手创建一个自动释放的字符串。不确定这是你的问题的原因,但使用字符串的固定内存管理可以产生像你看到的效果。所以清理它将是一个良好的开端。

此外,请确保在IB中您使单元格引用了文件所有者的vehicleSearchCell属性。更多的是在黑暗中刺伤。