【问题标题】:UILabel subview in UITableViewCell isn't showing up. (iPhone Dev)UITableViewCell 中的 UILabel 子视图未显示。 (iPhone 开发)
【发布时间】:2009-12-31 01:13:08
【问题描述】:

我在表格视图中有一个单元格,它有一个 UILabel 作为子视图,当我设置标签的文本时,它永远不会显示在单元格上。我在 iPhone 开发方面有点菜鸟,不知道我做错了什么......

我正在表格视图的 cellForRowAtIndexPath 委托中创建并返回以下单元格:

cell = [[[ActivityCell alloc] initWithFrame: CGRectZero reuseIdentifier:ColumnedCell] autorelease]; CGRect frame = CGRectMake(180.0, 11.0, 130.0, 22); UILabel *valueField = [[UILabel alloc] initWithFrame:frame]; [valueField setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin]; valueField.tag = 111; valueField.textAlignment = UITextAlignmentRight; valueField.textColor = [UIColor colorFromHex:@"326799"]; valueField.highlightedTextColor = [UIColor whiteColor]; valueField.baselineAdjustment = UIBaselineAdjustmentAlignCenters; valueField.adjustsFontSizeToFitWidth = YES; [cell.contentView addSubview:valueField]; [valueField release]; cell.selectionStyle = UITableViewCellSelectionStyleNone;

然后我想稍后通过这样做来设置 UILabel(子视图)(我目前在 viewDidAppear 中有这段代码):

ActivityCell *cell = (ActivityCell*)[formDetailsTableView cellForRowAtIndexPath: [NSIndexPath indexPathForRow:0 inSection:1]]; UITextField *valueField = (UITextField *)[cell viewWithTag:111]; valueField.text = @"foo";

但是“foo”这个词从未出现在 UILabel 中。我相信当我使用

关于为什么文本没有显示的任何想法?

跟进:

请查看此问题作为对此的跟进:UITableViewCell's textLabel is overlapping a subview label, how can I fix it? (iPhone Dev)

【问题讨论】:

    标签: iphone objective-c


    【解决方案1】:

    首先,您要创建一个 UILabel,将其标记为 111,然后将其作为子视图添加到单元格的 contentView。稍后,您尝试检索该 UILabel,但您将其转换为 UITextField。从根本上说,您在这里所做的事情是错误的。

    我建议这样做:

    1. 查看 Apple 的using Interface Builder to create cells 指南。这将导致代码更少,您将能够轻松查看正在发生的事情,并且无需以编程方式添加标签/文本字段。
    2. 与其尝试直接在 viewDidAppear 中访问单元格并更改其子视图,不如在 cellForRowAtIndexPath 中执行所有显示逻辑。在另一种方法中(例如,当用户触摸按钮时调用),您将修改一些数据结构,然后向 tableView 发送reloadData 消息。此时,再次调用 cellForRowAtIndexPath 并在数据结构中设置的值决定如何创建单元格。

    【讨论】:

      【解决方案2】:

      看起来你有一个小错误:

      改变

      UITextField *valueField = (UITextField *)[cell viewWithTag:111];
      

      UITextField *valueField = (UITextField *)[cell.contentView viewWithTag:111];
      

      【讨论】:

      • 不走运,valueField.text 看起来像已设置(通过 NSLog)但它没有显示在视图中。
      【解决方案3】:

      我的猜测是返回的单元格为零,因此不会更新您的文本。我会开始购买,以确保您从这条线上得到一个单元格:

      ActivityCell *cell = (ActivityCell*)[formDetailsTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]];
      

      【讨论】:

        【解决方案4】:
        cell = [[[ActivityCell alloc] initWithFrame:
            CGRectZero reuseIdentifier:ColumnedCell] autorelease];
        


        你的单元格有一个 CGRectZero 框架

        【讨论】:

        • 初始化表格视图单元格的框架通常是无关紧要的,因为 UITableView 与单元格的许多其他方面一起管理它。这可能就是为什么 UITableViewCell 的指定初始化程序——-initWithStyle:reuseIdentifier: 现在完全消除了“frame”参数。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多