Xcode 4.2 UITableview Пользовательская ячейка - PullRequest
3 голосов
/ 28 ноября 2011

У меня проблема с пользовательской ячейкой на доске историй. Мне нужно получить доступ к меткам из метода под названием

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

Как я могу определить это в моем коде? Когда я использовал IBOutlet, то это могло вызвать ошибку.

Так, как я мог получить доступ к ярлыку как

cell.textlable.text ??

enter image description here

Большое спасибо.

Ответы [ 4 ]

13 голосов
/ 28 ноября 2011

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

Примером может быть:

@interface CustomCell : UITableViewCell
{
}
@property (nonatomic, retain) IBOutlet UILabel* customLabel;

@end

и реализация так же проста

#import CustomCell.h
@implementation CustomCell

@synthesize customLabel;

@end

Это так просто, Тогда в вашем методе вы бы сделали что-то вроде этого:

CustonmCell* cell = [tableView dequeueReusableCellWithIdentifier:@"customCell"];
cell.customLabel = //whatever
//or
UILabel* mylabel = cell.customLabel;

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

6 голосов
/ 28 ноября 2011

Одним из распространенных решений является присвоение каждой метке тега в раскадровке, а затем найдите метку с помощью viewWithTag:, чтобы найти ее в своем коде, например:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = blah blah blah ...
    ...
    UILabel *myLabel = [cell viewWithTag:1];
    UILabel *anotherLabel = [cell viewWithTag:2];
    // etc.
}
1 голос
/ 14 марта 2012

Просто отредактируйте ответ Робса.Это заняло у меня некоторое время, так как в xcode 4 возникла ошибка. Изменил это на следующее: UILabel * myLabel = (UILabel *) [cell.contentView viewWithTag: 1];

1 голос
/ 28 ноября 2011

Для пользовательской ячейки в раскадровке используйте метод cellWillDisplay вместо cellForRow для доступа к переменным ячейки.

Шаг 1. Создайте собственный класс MyTableViewCell: UITableViewCell. Поместите переменные IBOutlet в этот класс.

Шаг 2. В Xcode IB выберите ячейку, измените ее класс на MyTableViewCell. Затем свяжите IBOutlets.

Шаг 3. В cellWillDisplayAtIndexPath перейдите к переменным IBOutlet cell.myTextLabel как обычно.

РЕДАКТИРОВАТЬ: Исправление, если вы используете динамический прототип, то будет работать cellForRowAtIndexPath. Если вы используете статическую ячейку, используйте cellWillDisplayAtIndexPath. Если вы используете статическую ячейку, описанные выше шаги не применимы, так как вы будете определять свои IBOutlets в контроллере представления UITableView. Извините за путаницу.

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