Как повторно использовать подкласс UITableViewCell в IB - PullRequest
1 голос
/ 15 февраля 2012

Я создал подкласс UITableViewCell.В классе HomeViewController, который в настоящее время использует его, я делаю это:

@interface: (for HomeViewController)
@property (nonatomic, assign) IBOutlet UITableViewCell *customCell;

@implementation:


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CustomTableViewCellIdentifier = @"CustomTableViewCellIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CustomTableViewCellIdentifier];
    if (cell == nil) {
        UINib *cellNib = [UINib nibWithNibName:@"CustomTableViewCell" bundle:nil];
        [cellNib instantiateWithOwner:self options:nil];
        cell = self.customCell;
        self.customCell = nil;
    }
    NSUInteger row = [indexPath row];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    return cell;
}

В файле CustomTableViewCell.xib владельцем моего файла является HomeViewController, и я подключаю выходной файл от владельца файла к CustomTableViewCell.Все это прекрасно работает.

Теперь я хочу иметь еще один подкласс UIViewController с именем DetailViewController, чтобы использовать эту ячейку также.Мой владелец файла уже используется.Я не очень знаком с созданием других объектов для повторного использования этой ячейки.Может кто-нибудь объяснить, что мне нужно сделать в этом сценарии?Спасибо.

1 Ответ

4 голосов
/ 15 февраля 2012

Во-первых, не создавайте UINib объект каждый раз. Создайте его один раз и используйте повторно. Он будет работать намного быстрее.

Во-вторых, похоже, что единственное свойство владельца файла, которое вы подключаете, это customCell. Если это все, что вам нужно, было бы проще вообще не подключать соединение. Вместо этого убедитесь, что ячейка является первым или единственным объектом верхнего уровня в кончике (сделав его первым объектом верхнего уровня в разделе «Объекты» контура кончика). Тогда вы можете получить к нему доступ так:

+ (UINib *)myCellNib {
    static UINib *nib;
    static dispatch_once_t once;
    dispatch_once(&once, ^{
        nib = [UINib nibWithNibName:@"CustomTableViewCell" bundle:nil];
    });
    return nib;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CustomTableViewCellIdentifier = @"CustomTableViewCellIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CustomTableViewCellIdentifier];
    if (cell == nil) {
        NSArray *topLevelNibObjects = [self.class.myCellNib instantiateWithOwner:nil options:nil];
        cell = [topLevelNibObjects objectAtIndex:0];
    }

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    return cell;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...