Заполнение ячеек таблицы в 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.