Программно изменить UITableViewCell, инициализированный из кончика? - PullRequest
3 голосов
/ 30 декабря 2010

Я загружаю UITableViewCell из пера, используя [[NSBundle mainBundle] loadNibNamed: ...].Теперь я хочу выполнить некоторую работу после инициализации программно, прежде чем ячейка tableview будет использоваться в моем коде.Где я должен поместить этот код, как я не могу сделать это в методах initWithCoder, так как объекты меток в классе все еще равны нулю (поэтому ничего не могу установить).Когда UILabels в ячейке табличного вида инициализируются в первую очередь (все они определены как IBOutlets)?

1 Ответ

5 голосов
/ 30 декабря 2010

Вы должны создать подкласс UITableViewCell и поместить в него метод awakeFromNib для выполнения инициализации после пробуждения от пера.

Чтобы сохранить ваш код гибким, поместите этот код инициализации в некоторую подпрограмму, называемую myInit, и вызывайте ее из awakeFromNib и из других мест, где он должен быть вызван.

После некоторых трудностей я придумал немного другой подход к этой ситуации. Я подкласс UITableViewCell и у меня есть процедура инициализации, как это:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        [[NSBundle mainBundle] loadNibNamed:@"MyUITableViewCell" owner:self options:nil];
        [self addSubview:self.contentView];
    }
    return self;
}

, где contentView - это IBOutlet, содержащий содержимое ячейки. Это позволяет остальной части моего кода просто вызывать эту ячейку как любую другую ячейку. (кроме одного противного броска за (MyUITableViewCell*)[tv dequeueReusableCellWithIdentifier:CellIdentifier];)

...