Да, хотя требуется немного работы (и, к сожалению, также требуется некоторый опыт работы с Three20, чтобы понять это).
Сначала фон:
Когда вы создаете TTTableMessageItem
, Three20 позже создаст ячейку таблицы типа TTTableMessageItemCell
. (См. Код в -[TTTableMessageDataSource tableView:cellClassForObject:]
в проекте Three20UI.)
Итак, если вы посмотрите на исходный код класса TTTableMessageItemCell
(также в том же проекте), вы увидите, что у него есть свойство с именем titleLabel
. В функции - (UILabel*)titleLabel
, которая создает эту метку, она устанавливает _titleLabel.textColor = [UIColor blackColor]
.
Таким образом, это дает нам информацию, которая нам необходима, чтобы выяснить, как изменить цвет заголовка: вам нужно найти способ изменить свойство titleLabel.textColor
экземпляра TTTableMessageItemCell
. Есть несколько подходов, которые вы можете использовать.
Способ, который проще, но, возможно, не настолько чист (но на самом деле не так уж плох), состоит в том, чтобы создать собственный класс делегата таблицы - подкласс TTTableViewVarHeightDelegate
- и затем реализовать -[tableView:willDisplayCell:forRowAtIndexPath:]
в своем подклассе. , В этой функции измените titleLabel's 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];
}
Другой подход, который, возможно, немного чище, но требует больше работы, заключается в создании подклассов TTTableMessageItem
и TTTableMessageItemCell
; в подклассе TTTableMessageItemCell
измените цвет заголовка (например, переопределив -[titleLabel]
); затем подкласс TTListDataSource
или TTSectionedDataSource
; в подклассе переопределить -[tableView:cellClassForObject:]
; и когда вам передают экземпляр вашего TTTableMessageItem
подкласса, возвращают экземпляр вашего TTTableMessageItemCell
подкласса. Уф! Это дает вам повторное использование кода: Любая таблица может возвратить экземпляр вашего подкласса TTTableMessageItem
и получить заголовок соответствующего цвета, а не описанную выше технику, которая является чем-то вроде хака, потому что она помещает ячейку Знание цвета в делегате табличного представления, который не совсем подходит для этого. Но, как вы видите, для чего-то простого, например, просто поменять цвет, нужно пройти через много обручей.