【问题标题】:Why doesn't UITableViewCell background color work (set in interface builder)?为什么 UITableViewCell 背景颜色不起作用(在界面生成器中设置)?
【发布时间】:2011-07-07 05:00:18
【问题描述】:

为什么 UITableViewCell 背景颜色不起作用(在界面生成器中设置)?

我从一些搜索中注意到,在您的 UITableViewController 的自定义子类中设置的以下代码确实有效(见下文):

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.backgroundColor = [UIColor redColor];
}

但我仍然想了解为什么界面生成器为 TableViewCell 设置了背景颜色,这实际上似乎不起作用?

【问题讨论】:

  • 你需要展示你是如何从 nib 加载你的 UITableViewCell 的,你可能有问题。
  • 我可以确认 OP——奇怪。但请注意,在 IB 中,UITableViewCell 看起来不像是小视图的普通版本,它在背景顶部有一个椭圆形的“内容”区域。我认为这表明背景视图顶部有一些东西。
  • 是的,里面有很多东西,包括一个名为“backgroundView”的表格单元格的视图。
  • 我发现的一件事是 cell.backgroundColor = [UIColor redColor];如果您使用的是 grouped 表格样式,则确实可以在 didSelectRowAtIndexPath 中使用。普通的不起作用。

标签: ios uitableview cocoa-touch uikit


【解决方案1】:

有点晚了,但我刚刚遇到了这个问题...在contentView 上设置背景颜色可以正常工作:

cell.contentView.backgroundColor = [UIColor redColor];

【讨论】:

  • 谢谢老哥,我快要疯了,但你救了我! ;)
  • 如果你想最小化你必须在代码中做的样式数量,你也可以使用 Interface Builder 中的用户定义的运行时属性部分来设置它 - 只需使用'contentView.backgroundColor'作为键路径,选择“颜色”作为类型,然后使用 Interface Builder 颜色选择器为值选择一种颜色。只要确定你是否打算采用这种方法,将其作为团队的标准,否则你最终会给未来的开发人员创造一个长期的谜团,他们无法弄清楚到底在哪里背景颜色正在设置中。
  • ios7以下的ios,必须使用cell.contentView.backgroundColor,但不能使用cell.backgroundColor
  • 问题是为什么它在 IB 中不起作用。我们已经知道它以编程方式工作。
【解决方案2】:

对我有用的是创建我自己的 UIView 对象以设置为 UITableViewCell 的背景视图。在 cellForRowAtIndexPath 中:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UIView* bgview = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
bgview.opaque = YES;
bgview.backgroundColor = [UIColor orangeColor];
[cell setBackgroundView:bgview];

【讨论】:

    【解决方案3】:

    尝试设置 UITableViewCell 本身的背景颜色不是你应该做的。一个表格单元格包含五个您可以访问的有用视图的集合,其中一个是 backgroundView

    推荐阅读:

    http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html

    然后:

    http://cocoawithlove.com/2010/12/uitableview-construction-drawing-and.html

    【讨论】:

    • 但是当你从 nib 加载你自己的 tableview 单元格时,你希望得到你在 Interface Builder 中设置的内容。那么,当您从 nib 加载单元格时,您正在编辑 UITableViewCell 的众多视图中的哪一个?
    • 不确定我是否理解您的问题。但是当你从一个 nib 加载 UITableViewCell 时,你知道你正在加载哪个单元格,因为有问题的方法 (cellForRowAtIndexPath:) 在 NSIndexPath 中传递。如有必要,您可以在从笔尖加载表格单元格后对其进行自定义。请注意,您可以从界面生成器中连接 UITableViewCell 的 backgroundView 等部分。
    • 感谢 occulus - 我猜这与 UITableViewCell 中的视图数量有关,但我更多的是寻找一个简单的答案,为什么 Apple 会让你能够设置看起来是Interface Builder 中的整体“背景”,而实际上它似乎不起作用。例如,这真的是 Interface Builder 中的一个可用性错误吗?
    • 我明白你的意思格雷格。界面构建器允许您以通常的方式设置背景似乎有点误导,还请记住,在 IB 中看到的 UITableViewCell 具有带有“内容视图”的椭圆形虚线轮廓,因此也暗示这是一个稍微不寻常的组件,因为它包含构成其外观的其他视图。
    • 谢谢,这里有经验的开发人员了解我来自哪里,这让我感到欣慰 :) 所以我并没有完全误解某些东西。也许简单的答案是,Apple 的 IB 的设计是通用的,可以应用于多种组件,并且还针对技术含量高的受众(开发人员),因此他们觉得有必要为每个场景(而不是离开)适当地自定义界面通用)不值得这样做......有意义吗?
    【解决方案4】:

    根据 Apple 文档,您应该始终在 tableView:willDisplayCell:forRowAtIndexPath: 而不是 tableView:cellForRowAtIndexPath: 方法中为单元格提供更改。

    这行得通!

    【讨论】:

      【解决方案5】:
      [cell.textLabel setBackgroundColor:[UIColor clearColor]];
      [cell.contentView setBackgroundColor:[UIColor redColor]];
      

      【讨论】:

      • 一些解释将有助于这个答案
      【解决方案6】:

      确保在定义单元格颜色之前您的backgroundView 为空

      cell.backgroundView = nil;
      cell.backgroundColor = [UIColor redColor];
      

      【讨论】:

        【解决方案7】:

        这很简单并且有效:在界面生成器中,将视图对象添加到相同尺寸的 UITableViewCell 中,然后将控件放置在该视图中。然后你得到你想要的任何背景颜色。

        编辑:这是一个接受的理由,它让我很震惊:仔细看看当你在 IB 中双击一个 UITableViewCell 时你得到了什么没有一个普通的矩形视图,你会得到一个椭圆矩形,它说得很清楚:内容视图。所以只能在IB中设置UITableViewCell的内容视图,设置内容视图的背景色属性不会产生表格的颜色变化。正如文档所说,UITableViewCells 是复杂的野兽,有很多部分,在 UITableView 调整和摆弄它方面,幕后发生了很多事情。

        【讨论】:

        • 感谢 Bogatyr 提供的信息 - 我不会仅仅因为问题是在寻找外行术语类型的答案而接受这个事实,即为什么 IB 是这样设置的 - 例如例如,这真的是 Interface Builder 中的一个可用性错误吗?
        【解决方案8】:

        如果您选择 tableview 并将背景设置为例如红色,则它工作得很好,整个表格将是红色的。 也许您没有链接表格或其他东西

        希望对你有帮助

        【讨论】:

        • 不是你怎么做的。即使您的方法似乎有效,这也是一个坏主意。看我的回答。
        • 嗨,我在视图部分选择了 IB 中的表格视图,我将背景设置为一种颜色并简单地保存它。它可以工作
        • 换种说法——他的问题不是“如何更改整个表格的背景”。 Hsi 问题是关于表格单元格的背景。
        • 他的问题是:“但我仍然想了解为什么界面生成器为 TableViewCell 设置了背景颜色,这实际上似乎不起作用?”在 IB 中,您可以设置背景颜色但你是对的,它适用于整个表格而不是单个单元格,就像我的回答中写的那样:“整个表格都是红色的”
        • 感谢 Csabi - 这是有用的信息 - 我可能会留下这个问题,但我要问的具体问题是 - 是否有答案,非 Apple 人知道我不确定跨度>
        【解决方案9】:

        (试试这个)

        Apple 的 IB 设计通用,可应用于多种组件,并且还针对高技术受众(开发人员)。因此,它并没有被设计为(作为应用程序)为每个组件/情况类型正确地完全自定义界面。所以在这种情况下,看似设置背景颜色的能力有点误导。

        【讨论】:

          【解决方案10】:

          不是,使用 setBackgroundColor

          self.table.separatorColor=[UIColor whiteColor];
          [table setBackgroundColor:[UIColor colorWithRed:.8 green:.8 blue:1 alpha:1]];
          

          【讨论】:

            【解决方案11】:

            您可以在 Interface Builder 中部分执行此操作(最近可能已添加到 Xcode):

            • 展开情节提要的文档大纲中的单元格并选择“内容视图”
            • 在属性检查器中设置内容视图背景颜色
            • 选择单元格中的每个内容项并设置它们的背景颜色 到 ClearColor

            仍然看不到设置附件背景的方法。

            【讨论】:

              【解决方案12】:

              我也确实遇到了这个问题。 在 IB 中,您可以在选择单元格时更改单元格的背景颜色。这是不正确的。您应该转到情节提要左侧的文档大纲并选择单元格内的内容视图。更改内容视图的背景。您现在应该得到正确的单元格颜色。

              【讨论】:

                【解决方案13】:
                -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
                UIView *view = [[UIView alloc] init];
                [view setBackgroundColor:[UIColor redColor]];
                [cell setSelectedBackgroundView:view];}
                

                我们需要在这个方法中改变颜色。

                【讨论】:

                  【解决方案14】:

                  试试这个对我有用:

                  - (void)tableView:(UITableView *)tableView1 willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
                  {
                      [cell setBackgroundColor:[UIColor clearColor]];
                      tableView1.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: @"Cream.jpg"]];
                  }
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2013-06-01
                    • 1970-01-01
                    • 2014-07-20
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多