Раскадровка и таможенные клетки, которые я не хочу использовать повторно - PullRequest
0 голосов
/ 21 ноября 2011

В моем приложении у меня есть табличное представление с 12 типами пользовательских ячеек.Я разработал каждый в раскадровке.В целом все работает отлично - благодаря вашим учебникам :) Моя проблема в том, что у меня есть отдельные стили для дополнительных данных в каждой ячейке - поэтому я не хочу, чтобы они использовались повторно.Как я могу создать отдельную пользовательскую ячейку из раскадровки, чтобы указать ее в -

tableView:cellForRowAtIndexPath:indexPath?

Есть предложения?Спасибо, Доминик

Добавлено:

    newCell = [tableView dequeueReusableCellWithIdentifier:cellType]; 
    cell = newCell;
    [cell styleWithElement:element andResubItem:resubItem];

Моя проблема в том, что мне нужен другой способ создания ячейки с пользовательским стилем из раскадровки, чем приведенный выше - у меня нет XIB и вышеупомянутый способэто единственный способ, которым я знаю, чтобы создать свою клетку.Может ли быть решение создать тип ячейки, как описано выше, а затем скопировать ячейку?Есть ли способ скопировать объект-ячейку?

1 Ответ

0 голосов
/ 21 ноября 2011

Вы можете генерировать случайный идентификатор ячейки каждый раз, чтобы он не использовался повторно.

Однако это не очень хорошо сказывается на производительности прокрутки и потреблении памяти, поэтому рассмотрите возможность многократного использования ячеек (т. Е. Придумайте способ замены данных в них).

Редактировать:

Вы всегда можете просто скопировать виды из одного в другое, что-то вроде этого:

UITableViewCell* myCell = [UITableViewCell alloc] initWithStyle:YOUR_CELL_STYLE reuseIdentifier:YOUR_RANDOM_ID];
for (UIView *view in newCell.subviews) {
    [view removeFromSuperview];
    [myCell addSubview: view];
}

Вам также может понадобиться настроить фрейм myCell таким же, как у newCell, и если newCell является целью действия для каких-либо событий (например, нажатие элемента управления в ячейке вызывает некоторое действие, определенное в классе ячейки) вам также придется переназначить их на myCell.

Edit2:

Для перемещения действий вы можете сделать что-то вроде этого:

NSSet* targets = [control allTargets];
for(id target in targets) {

    NSArray* actions = [control actionsForTarget:target forControlEvent:UIControlEventTouchUpInside];
    for(NSString* selectorName in actions) {
    [newControl addTarget:target action:NSSelectorFromString(selName) forControlEvents:UIControlEventTouchUpInside];
    }
}

Замените вашу новую ячейку на цель - и убедитесь, что она реализует все необходимые селекторы (или вы можете поставить новый селектор). Приведенный выше код заменит цели для UIControlEventTouchUpInside - вы можете вместо этого использовать те, которые вам нужны (или использовать allControlEvents для перечисления целей, используемых элементом управления).

...