【问题标题】:problem with custom uitableviewcell自定义 uitableviewcell 的问题
【发布时间】:2011-11-04 01:47:55
【问题描述】:

过去几天我一直在玩 tableviews 试图习惯它们,今天我一直在尝试创建一个自定义的 uitableviewcell,我正在根据苹果文档中的 Table View Programming Guide 工作并且有这个奇怪我正在尝试做的事情有问题。

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

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

自定义单元笔尖

tableView:cellForRowAtIndexPath: 方法

    - (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)
            {
//.....

任何帮助将不胜感激:)

【问题讨论】:

    标签: iphone ios uitableview uilabel


    【解决方案1】:

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

    如果您要重用单元格,我建议您创建一个自定义 UITableViewCell 子类并通过 IB 链接它们。如果您不重复使用该单元格,并且希望它只显示一次,请务必接受 Karoly 的建议,将这些标签作为 IBOutlets。

    【讨论】:

    • 这确实是问题所在。非常感谢...我将标签更改为 +1,一切都很好:) 后面真是太痛苦了。
    【解决方案2】:

    这让我觉得很奇怪- 为什么要使用

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

    相对

    label.text = @"Manufacture :";
    

    就是这样,你没有释放你的字符串。使用 @"xxx" 简写创建一个自动释放的字符串。不确定这是您问题的原因,但是带有字符串的混乱内存管理会产生像您看到的效果。所以清理它会是一个好的开始。

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

    【讨论】:

    • 好点,似乎不需要分配。
    • hrmm 这没有用,但也没有定义一个新的标签..这里发生了一些奇怪的事情......我检查了我的自定义单元笔尖,一切都设置正确..
    【解决方案3】:

    在提供的代码中,我只看到一件令我印象深刻的东西。看起来您正在覆盖您的标签值。两者中的哪一个在显示?

    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 文件中检查您的属性,看看是否有需要更改的地方。

    【讨论】:

    • Karoly S 是对的,您通常会为两个标签使用单独的变量。
    • 我在想同样的事情..在示例中他们似乎在做同样的事情,我认为 viewWithTage 参数正在启用这种功能......我现在就试试这个似乎是最有可能的解决方案...
    • 不需要,label只是一个指向cell的指针,在使用前设置到每个cell。
    猜你喜欢
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多