Как установить источник данных UICollectionView в UITableView при наличии двух разных типов UITableViewCell в одном TableView - PullRequest
0 голосов
/ 04 июня 2018

Я изучаю UICollectionView и применяю его в своем приложении ios.Тем не менее, у меня возникла проблема, что я не могу перезагрузить данные UICollectionView.

PS данные уже были успешно сохранены в массиве с именем queriedGroups.У меня есть только два раздела в UITableView.

TableViewCell:

Я определил UICollectionview в UITableViewCell и метод, который настроил delegate и datasource для UICollectionView.Вот метод:

- (void)setCollectionViewDataSourceDelegate:(id<UICollectionViewDataSource, UICollectionViewDelegate>)dataSourceDelegate indexPath:(NSIndexPath *)indexPath
{
    self.collectionView.dataSource = dataSourceDelegate;
    self.collectionView.delegate = dataSourceDelegate;
    self.collectionView.indexPath = indexPath;

    [self.collectionView reloadData];
}

TableViewController:

В UITableView у меня есть два различных типа TableViewCell: 1) тот, который содержитUICollectionView;2) типичный UITableViewCell.

Вот как я настроил эти два TableViewCell в cellForRowAtIndexPath::

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.section == 0) {
        static NSString *CellIdentifier = @"CellIdentifier";

        GroupCategoryViewCell *cell = (GroupCategoryViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

        if (!cell)
        {
            cell = [[GroupCategoryViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }

        return cell;
    } else {
        static NSString *GroupCellIdentifier = @"GroupListViewCell";
        if (indexPath.row < queriedGroups.count) {
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:GroupCellIdentifier];
            if (cell == nil) {
                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:GroupCellIdentifier];
            }

            cell.textLabel.text = queriedGroups[indexPath.row];
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

            return cell;
        }
    }

    return nil;
}

А вот willDisplayCell::

-(void)tableView:(UITableView *)tableView willDisplayCell:(GroupCategoryViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == 0) {
        [cell setCollectionViewDataSourceDelegate:self indexPath:indexPath];
    }
}

Проблема:

Я успешно применил UICollectionView в UITableView только с одним типом UITableViewCell на другом контроллере.В этом контроллере метод willDisplayCell: может успешно настроить delegate и datasource для UICollectionView.

Однако, очевидно, он не может работать для контроллера, который имеет два различных типа UITableViewCell водин UITableView.

Как мне настроить delegate и datasource для UICollectionView и перезагрузить данные в этой ситуации?

Большое спасибо за помощь в решениимоя проблема.Я ценю всю вашу помощь!

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