【问题标题】:it is possible to change title colors of TTTableMessageItem(Three20)?可以更改 TTTableMessageItem(Three20) 的标题颜色吗?
【发布时间】:2011-03-06 17:27:13
【问题描述】:

当我创建 TTTableMessageItem 的实例时,我只能访问 imageURL、caption、title 等。可以更改 TTTableMessageItem(Three20) 的标题颜色吗?

【问题讨论】:

    标签: iphone objective-c sdk three20


    【解决方案1】:

    是的,虽然这需要一些工作(不幸的是,还需要一些使用 Three20 的经验才能弄清楚)。

    一、背景:

    当您创建TTTableMessageItem 时,Three20 稍后将创建TTTableMessageItemCell 类型的表格单元格。 (参见 Three20UI 项目中-[TTTableMessageDataSource tableView:cellClassForObject:] 中的代码。)

    因此,如果您查看类TTTableMessageItemCell(也在同一个项目中)的源代码,您会看到它有一个名为titleLabel 的属性。在创建该标签的函数- (UILabel*)titleLabel 中,它设置_titleLabel.textColor = [UIColor blackColor]

    因此,这为我们提供了弄清楚如何更改标题颜色所需的信息:您需要找到一种方法来更改 TTTableMessageItemCell 实例的 titleLabel.textColor 属性。您可以采取几种方法。

    更简单但可以说不是那么干净(但不是那么糟糕)的方法是创建自己的表委托类——TTTableViewVarHeightDelegate 的子类——然后在你的子类中实现-[tableView:willDisplayCell:forRowAtIndexPath:] .在该函数中,更改 titleLabel 的 textColor。采取这种方法:

    • 创建您自己的表视图委托类——TTTableViewVarHeightDelegate 的子类。比如这里是MyDelegate.h

      @interface MyDelegate : TTTableViewVarHeightDelegate
      @end
      

      这里是MyDelegate.m

      @implementation MyDelegate
      
      - (void)tableView:(UITableView *)tableView
                willDisplayCell:(UITableViewCell *)cell
              forRowAtIndexPath:(NSIndexPath *)indexPath 
      {
          if ([cell isKindOfClass:[TTTableMessageItemCell class]]) {
              TTTableMessageItemCell* messageCell = (TTTableMessageItemCell*)cell;
              messageCell.titleLabel.textColor = [UIColor blueColor];
          }
      }
      
      @end
      
    • 在您的表格视图控制器(TTTableViewController 的子类)中,覆盖 createDelegate

      - (id <UITableViewDelegate>) createDelegate {
          return [[[MyDelegate alloc] initWithController:self] autorelease];
      }
      

    另一种可能更简洁但需要更多工作的方法是将TTTableMessageItemTTTableMessageItemCell子类化;在您的 TTTableMessageItemCell 子类中,更改标题颜色(例如,通过覆盖 -[titleLabel]);然后是TTListDataSourceTTSectionedDataSource 的子类;在子类中,覆盖-[tableView:cellClassForObject:];当您获得TTTableMessageItem 子类的实例时,返回TTTableMessageItemCell 子类的实例。哇!这给您带来的是代码重用:Any 表可以返回您的 TTTableMessageItem 子类的实例并获得适当颜色的标题,而不是上述技术,因为它把表格视图委托中的单元格颜色知识,这并不是真正适合它的地方。但正如您所看到的,对于像更改颜色这样简单的事情,这需要跳过很多圈。

    【讨论】:

    • 首先感谢您的解释。它非常有用。我解决了使用 TTTableMessageItemCell 的问题。但是当我使用 TTTableMessageItemCell 时,我无法选择任何行。当我单击单元格时,didSelectObject 方法不起作用。之前,我被设置为 TTTableMessageItem 的 URL。 TTTableMessageItemCell 是否支持 TTTableMessageItem 之类的 URL?谢谢。
    • 我不太明白你的问题。 URL 和 didSelectObject 应该可以正常工作 - 只需在您创建的 TTTableMessageItem 中设置 URL,这应该会导致 TTTableMessageItemCell 使用该 URL 并且可以点击。
    猜你喜欢
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多