Вы можете создать подкласс UITableViewCell, а затем вам придется каким-то образом передать секцию и строку ячейке, чтобы она знала, как установить фон.
Однако вы также можете создать подкласс UITableView. Ниже приведено решение, если вы решили создать подкласс UITableView, но, в конце концов, это ваше решение.
Единственный способ, о котором я могу думать прямо сейчас, - это каким-то образом перехватить все запросы к источнику данных tableView, чтобы вы могли затем манипулировать результатами.
Вы можете сделать это так:
Подкласс UITableView, назовем его MyUITableView следующим образом:
Добавьте переменную-член id<UITableViewDataSource> myDataSource
, а также свойство для этой переменной с установленным в ней IBOutlet. Затем в Интерфейсном Разработчике вы должны подключить табличное представление, используя это свойство вместо стандартного свойства источника данных uitableview.
Где-то в init
или loadView
, напишите self.dataSource = self
. Идея состоит в том, чтобы перехватывать все запросы (особенно cellForRowAtIndexPath
), чтобы вы могли манипулировать фактическими результатами.
В вашем подклассе реализуйте протокол UITableViewDataSource и просто перенаправьте все вызовы в объект myDataSource.
Единственное исключение в реализации cellForRowAtIndexPath
, где после получения результата от myDataSource вы можете изменить цвет фона, если выполняется определенное условие. Смотрите пример кода ниже
<code></p>
<p>@interface MyUITableView : UITableView {
id<UITableViewDataSource> myDataSource;
}</p>
<p>@property (nonatomic, retain) IBOutlet id<UITableViewDataSource> myDataSource;</p>
<p>@end</p>
<p>
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Get the result from the actual data source
UITableViewCell* cell = nil;
if (myDataSource)
cell = [myDataSource tableView:self cellForRowAtIndexPath:indexPath];
// If you condition is met, then just modify the cell in some way
if (indexPath.section == 0 && indexPath.row == 0)
cell.contentView.backgroundColor = [UIColor redColor];
return cell;
}
И это почти все, что вам нужно. Я не знаю, был ли я достаточно ясен, но если у вас есть какие-либо вопросы, не стесняйтесь.