Заполнение ячеек таблицы в iOS 6
Я попытался найти несколько руководств по заполнению табличных представлений, но все, что я нашел, это старые и устаревшие видео. Я попытался сделать это из немного более недавнего, и это не сработает. У меня
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
[chemarray addObject:@"2"];
[chemarray addObject:@"test"];
[chemarray addObject:@"3"];
[chemarray addObject:@"science"];
}
и
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [chemarray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
cell.textLabel.text = [chemarray objectAtIndex:indexPath.row];
return cell;
}
в соответствии с этим руководством, при запуске он должен отображать элементы в моем массиве, но для меня это не так! Кто-нибудь знает, как это исправить?
Ответы
Ответ 1
Вы забыли зарегистрировать nib/class для идентификатора ячейки.
Создайте документацию Apple UITableView
:
Важно: вы должны зарегистрировать файл класса или nib, используя registerNib:forCellReuseIdentifier:
или registerClass:forCellReuseIdentifier:
перед вызовом dequeueReusableCellWithIdentifier:forIndexPath:
Метод.
Вот пример простого UITableViewCell
:
- (void) viewDidLoad {
[super viewDidLoad];
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
}
Если вы не зарегистрируете nib/class, метод dequeueReusableCellWithIdentifier:forIndexPath:
по существу совпадает с dequeueReusableCellWithIdentifier:
. И он автоматически не создаст для вас экземпляр.
Ответ 2
Я столкнулся с той же проблемой. Если вы используете iOS6, я предполагаю, что вы используете раскадровку и что вы связали контроллер вида с вашим пользовательским классом.
Затем нужно перейти в раскадровку, перейти к свойствам ячейки в вашем представлении таблицы и изменить значение Идентификатор на "Ячейка". Нет необходимости регистрировать класс в ViewDidLoad.
Ответ 3
- установите делегат в
uitableview.delegate = self
;
- проверьте, есть ли в протоколе объявления
<UITableViewDelegate, UITableViewDataSource>
-
Если вы не используете раскадровку, обязательно убедитесь, что ячейка init, если cell == nil
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
Ответ 4
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell.textLabel.text = [chemarray objectAtIndex:indexPath.row];
return cell;
}
Убедитесь, что у вас есть UITableViewDataSource
, UITableViewDelegate
в .h
и подключен делегат tableview
, источник данных и cellindentifier
Ячейка в .xib
.