可以更改TTTableMessageItem(Three20)的标题颜色吗?

时间:2011-03-06 17:27:14

标签: iphone objective-c sdk three20

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

1 个答案:

答案 0 :(得分:1)

是的,虽然需要一些工作(不幸的是,它还需要一些使用Three20的经验来解决它)。

首先,背景:

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

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

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

更容易,但可能不那么干净(但不是真的那么糟糕)的方法是创建自己的表委托类 - TTTableViewVarHeightDelegate的子类 - 然后实现{{1}在你的子类中。在该函数中,更改titleLabel的textColor。采取这种方法:

  • 创建自己的表视图委托类 - -[tableView:willDisplayCell:forRowAtIndexPath:]的子类。例如,这里是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]; } TTTableMessageItem;在TTTableMessageItemCell子类中,更改标题颜色(例如,通过覆盖TTTableMessageItemCell);然后是子类-[titleLabel]TTListDataSource;在子类中,覆盖TTSectionedDataSource;当您传递-[tableView:cellClassForObject:]子类的实例时,返回TTTableMessageItem子类的实例。呼!这会给你带来什么代码重用:任何表都可以返回你的TTTableMessageItemCell子类的实例,并获得一个适当颜色的标题,而不是上面的技术,这是一个有点黑客,因为它将单元格颜色知识放在表视图委托中,这对它来说并不是真正适合它的地方。但正如你所看到的,对于像改变颜色这样简单的东西,这是很多可以跳过的箍。