Почему я не могу определить IBOutlets при использовании пользовательских "прототипов табличных ячеек" - PullRequest
0 голосов
/ 13 декабря 2011

У меня есть собственная ячейка табличного представления, которая определена в моей раскадровке. Я также определил пользовательский класс UITableViewCell для этой специальной ячейки. Поэтому, когда я хочу создать Outlet для своей пользовательской ячейки прототипа, я получаю сообщение об ошибке, что Outlet не может быть создан.

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

Я не понимаю, почему это невозможно, и мне интересно, является ли работа с тегами и [myCell viewWithTag:] лучшим из возможных способов?

Ответы [ 3 ]

1 голос
/ 26 июля 2013

Поскольку розетка представляет собой соединение один-к-одному между вашим контроллером и определенным элементом в представлении.В случае ячейки-прототипа это просто описание ячейки, которая может иметь произвольное количество различных элементов (т. Е. Строк в табличном представлении).Как контролер узнает, на какой предмет вы ссылаетесь (например, строка 5 или 500)?Вот почему вы получаете сообщение об ошибке.

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

0 голосов
/ 22 августа 2014

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

0 голосов
/ 21 января 2012
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentInIB"];

UIImageView *img = (UIImageView*) [cell.contentView viewWithTag:1];
//img.image = ...

//Access you prototype cell here to alter its style, example:
[[cell layer] setCornerRadius:10];
[cell setClipsToBounds:YES];

return cell;}
...