Что подкласс от UITableView - PullRequest
       10

Что подкласс от UITableView

0 голосов
/ 26 октября 2011

Допустим, у меня есть 10 tableViews, у всех которых должен быть фон первой ячейки, во всех разделах цвет должен быть красным.

Чтобы не делать это вручную для всех 10 табличных представлений, ядумая, что я должен подкласс UITableView.

Мой вопрос будет: что я должен перезаписать из UITableView?

Или я должен наследовать UITableViewCell и все ячейки наследовать отсюда?.

1 Ответ

0 голосов
/ 26 октября 2011

Вы можете создать подкласс 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;
}

И это почти все, что вам нужно. Я не знаю, был ли я достаточно ясен, но если у вас есть какие-либо вопросы, не стесняйтесь.

...