在 UITableView 中的 Scrolling Filmstrip 中的每个 UICollectionViewCell 中添加 UIButton

Posted

技术标签:

【中文标题】在 UITableView 中的 Scrolling Filmstrip 中的每个 UICollectionViewCell 中添加 UIButton【英文标题】:Adding UIButton in each UICollectionViewCell in Scrolling Filmstrip within UITableView 【发布时间】:2015-08-03 16:47:32 【问题描述】:

首先,让我描述一下我目前所遇到的情况。下面是我的 UICollectionView 在 UITableView 中滚动幻灯片样式的工作原理:

使用自定义 UITableViewCell 创建普通 UITableView 创建一个自定义 UIView 将添加到单元格的 contentView 自定义 UIView 将包含 UICollectionView 自定义 UIView 将成为 UICollectionView 的数据源和委托,并管理 UICollectionView 的流布局 使用自定义 UICollectionViewCell 来处理集合视图数据 使用NSNotification来通知主控制器的 UitableView 当已选择收集视图单元格并加载详细视图时。

到目前为止,我已经能够创建上述内容,但正如您在图片中看到的那样,我还想在每个 UICollectionViewCell 中添加一个 UIButton,以便当我点击 UIButton 时它的图像将更改为选中标记,并且该 UICollectionViewCell 中的数据将保存到数组中。最后,当我点击右上角的三角形按钮时,它将推送到另一个视图,其中包含保存传递的所选数据的数组。

这是我所学的所有相关课程:

UITableView

ViewController.h ViewController.m

UIView

ContainerCellView.h ContainerCellView.m

UICollectionViewCell

CollectionViewCell.h CollectionViewCell.m

UITableViewCell

ContainerCell.h ContainerCell.m

我的问题是,我的 UIButton 至少无法显示(目前),下面的代码:

ContainerCellView.m

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

    CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CollectionViewCell" forIndexPath:indexPath];
    NSDictionary *cellData = [self.collectionData objectAtIndex:[indexPath row]];

    ...

    //  >>> Select Button <<<

    UIButton *button = (UIButton *)[cell viewWithTag:200];
    [button setFrame:CGRectMake(0, 0, 50, 60)];
    [button setTitle:@"Button" forState:UIControlStateNormal];
    [cell.contentView addSubview:button]; //???

    //  >>> End Select Button <<<<

    ...

    return cell;

ContainerCell.m

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) 
        // Initialization code
        _collectionView = [[NSBundle mainBundle] loadNibNamed:@"ContainerCellView" owner:self options:nil][0];
        _collectionView.frame = self.bounds;
        [self.contentView addSubview:_collectionView];
    
    return self;

我做错了什么,我应该如何做得更好?如果您需要更多信息,我们非常欢迎您提出要求。提前致谢。

【问题讨论】:

(UIButton *)[cell viewWithTag:200] 是否返回了您所期望的结果? @jrisberg 你说对了。这是从我的旧环境中遗留下来的,我忽略了它。现在我用UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 替换它并显示按钮。如果您只是提出意见,我会接受您的评论作为答案。谢谢! 很高兴你得到它! 【参考方案1】:

确保(UIButton *)[cell viewWithTag:200] 正在返回您所期望的,这里的新按钮将满足您的目的。

【讨论】:

以上是关于在 UITableView 中的 Scrolling Filmstrip 中的每个 UICollectionViewCell 中添加 UIButton的主要内容,如果未能解决你的问题,请参考以下文章

尝试在用户向 iOS 中的 UITableView 添加行时动态增加 UITableView 的高度

水平 UITableView 中的垂直 UITableView

UITableView 中的圆顶角

uiscrollview 中的 uitableview(滚动问题)

在 UITableView 中的 Scrolling Filmstrip 中的每个 UICollectionViewCell 中添加 UIButton

uitableview中的ios进度条