当我创建TTTableMessageItem的实例时,我只能访问imageURL,标题,标题等。可以更改TTTableMessageItem(Three20)的标题颜色吗?
答案 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
子类的实例,并获得一个适当颜色的标题,而不是上面的技术,这是一个有点黑客,因为它将单元格颜色知识放在表视图委托中,这对它来说并不是真正适合它的地方。但正如你所看到的,对于像改变颜色这样简单的东西,这是很多可以跳过的箍。