如何在TableView中使用UICollectionView

时间:2014-10-24 04:18:53

标签: ios uitableview uicollectionview

您好我们如何为iPhone应用程序连接带有Table View iOS 7+的Collection View ..

我想在屏幕的顶部有一个滚动视图,在剩下的屏幕上,我想要一个TableView,基本上显示用户在CollectionView中选择的任何信息。

由于我是iOS的新手,如果你能指出我任何有用的资源,那就太棒了。

干杯

2 个答案:

答案 0 :(得分:0)

有很多方法可以实现这一点,但我通常都在一个视图控制器中完成。有些人不同意这种做法。但是,它更简单,也很简单。

为此,您可以创建一个空白VC并初始化您的集合视图和表视图&添加到VC的视图中,并将您的VC指定为委托&数据源。然后,您实现集合视图&表格查看方法&委托方法。选择CollectionView单元后,您可以更新表视图数据源(如果是数组)或对核心数据运行谓词,然后在表视图上重新加载以获取新的详细信息。

请务必实现UICollectionView和UITableView所需的所有方法,您将从Apple文档中获取这些方法。如果你这样做,它应该是直截了当的。

我不知道你在这个问题上得到了什么。

答案 1 :(得分:0)

最后我设法让这个半工作..谢谢RegularExpression !! (很明显,我一直在学习很多东西)..然而,我已经注意到了......收集视图,' cellForItemAtIndexPath'被调用了两次......结果......我的表格视图总是显示下一个单元格的数据。可以解决发生的事情。这是我的VC代码。我无法锻炼我所做的事情&#39我做错了。我需要调查在主视图上使用2个容器并添加CollectionViewController和TableViewController ...不确定那是更好的方法..但在我采用这种方法之前...想知道是否有无论如何我可以修复我现在拥有的东西..

- (void) setManagedObjectContext:(NSManagedObjectContext *)managedObjectContext {

    _managedObjectContext = managedObjectContext;

    [self performFetchForCV];

}
- (void)viewDidLoad
{
    [super viewDidLoad];
    UICollectionViewFlowLayout *flowLayout = [[LineLayout alloc] init];
    [self.collectionView setCollectionViewLayout:flowLayout];
}

-(void)performFetchForCV {

    if (!_fetchedResultsController) {
        NSFetchRequest *request= [NSFetchRequest fetchRequestWithEntityName:@"Entity"];
        gymClassesRequest.predicate = nil;
        gymClassesRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"name"
                                                                            ascending:YES
                                                                             selector:@selector(localizedStandardCompare:)]];

        _fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
    }

    NSError *error = nil;
    if (![_fetchedResultsController performFetch:&gymClassesError]) {
        NSLog(@"Unresolved error %@, %@", gymClassesError, [error userInfo]);
        abort();
    }

    [self.collectionView reloadData];
}

- (void)performFetchForTV:(NSPredicate *)predicate {

    if (!_fetchedResultsControllerForTV) {
        NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Entity2"];
        gymScheduleRequest.predicate = nil;
        gymScheduleRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"day" ascending:YES selector:@selector(localizedStandardCompare:)]];

        _fetchedResultsControllerForTV = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"day" cacheName:nil];
    }

    [_fetchedResultsControllerForTV.fetchRequest setPredicate:predicate];

    NSError *error = nil;
    if (![_fetchedResultsControllerForTV performFetch:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    [self.tableView reloadData];

}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

    MyCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseCollectionViewCellIdentifier forIndexPath:indexPath];

    MyEntity *entity= [self.fetchedResultsController objectAtIndexPath:indexPath];

    cell.nameLabel.numberOfLines = 0;
    cell.nameLabel.lineBreakMode = NSLineBreakByWordWrapping;
    cell.nameLabel.autoresizingMask = UIViewAutoresizingFlexibleHeight;
    cell.nameLabel.text = entity.name;

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name= %@", entity.name];
    [self performFetchForTV:predicate];

    return cell;
}