Создан пользовательский UITableViewCell - Могу ли я связать дизайн с файлом XIB? - PullRequest
1 голос
/ 29 декабря 2010

У меня есть собственный класс, который наследуется от UITableViewCell.Я знаю, как динамически добавлять элементы в пользовательскую ячейку с помощью layoutSubviews, однако у меня есть довольно сложная ячейка, которую я хотел бы создать из Interface Builder и файла XIB.

Есть ли способ сделать это?Если так, то как?Имейте в виду, я очень новичок в XCode, поэтому чем больше деталей вы предоставите, тем лучше.:)

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 10 февраля 2011

В своем подклассе UITableViewController добавьте IBOutlet для своего пользовательского класса ячеек:

@property(nonatomic,retain)IBOutlet UITableViewCell *customCell;

Затем в пользовательской ячейке xib установите для владельца файла свой подкласс UITableViewController и назначьте внешний вид IBOutlet для владельца файла. Для каждого подпредставления, к которому вы хотите получить программный доступ, присвойте уникальное значение его свойству tag. Допустим, в вашей пользовательской ячейке есть 3 метки, которые вы пометили 1, 2 и 3.

Наконец, в вашем методе cellForRowAtIndexPath загрузите наконечник в розетку, используя метод loadNibNamed. См. API документы для объяснения того, как это работает.

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    // assuming nib is MyCustomCell.xib
    [[NSBundle mainBundle] loadNibNamed:@"MyCustomCell" owner:self options:nil];

    // assign IBOutlet to cell
    cell = customCell;

    // clear IBOutlet
    self.customCell = nil;
}

Теперь вы можете получить доступ к помеченным представлениям в вашей пользовательской ячейке, используя метод viewWithTag в вашей ячейке:

UILabel *label1 = (UILabel *)[cell viewWithTag:1];
label1.text = @"foo";

UILabel *label2 = (UILabel *)[cell viewWithTag:2];
label2.text = @"bar";

UILabel *label3 = (UILabel *)[cell viewWithTag:3];
label3.text = @"baz";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...