菜鸟教程小白 发表于 2022-12-12 11:52:53

ios - UITableViewCell 中的 UICollectionView


                                            <p><p>我注意到 iOS 在 <code>UITableViewCell</code> 中使用 <code>UICollectionView</code> 时非常不礼貌。我想要实现的是,在 <code>UITableViewCell</code> 中有一个图像集合(<code>UICollectionView</code> 方法)。我想模仿 Facebook 的帖子风格,我想,他们有一个 <code>UITableView</code>,带有自定义单元格等等,但是 <strong>这里是</strong>问题...</p>

<p>我已设法将 <code>UICollectionView</code> 放入 <code>UITableViewCell</code> 中,它工作正常且完美,没问题,一切正常,可点击等等。但是,我尝试重构我的代码,将 <em><code>UICollectionViewDataSource</code></em> 和 <em><code>UICollectionViewDelegate</code></em> 提取到单独的文件中,以便重用它们并拥有<code>Main View Controller</code> 上的代码较少,就在这里,当我的 <strong>Nightmare</strong> 开始时,我不知道为什么如果我使用单独的文件 iOS Cycles 的配置细胞。例如:</p>

<pre><code>-(void)configureCell:(UICollectionViewCell*)customCell atIndexPath:(NSIndexPath*)indexPath;
</code></pre>

<p>上面的方法在进程的两个部分被调用:</p>

<pre><code>-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
NSString *identifier = ;
UITableViewCell *myCell = ;
;
;
;
;
;
CGFloat height = .height;
return height;
}
</code></pre>

<p>上面的方法被调用来使用 AutoLayout 计算行高我在 <strong>StackOverFlow</strong> 的帖子上读到了这个(不记得帖子:()</p>

<p>在计算高度等之后,另一个方法调用“<code>configureCell</code>”方法:</p>

<pre><code>- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *rowName = ;
    PostDetailTableViewCell *cell = ;

    //PreCondition
    if(){
      return cell;
    }

    // Configure the cell...
    ;

    ;

    return cell;
}
</code></pre>

<p>当调试器启动时,<em><code>configureCell:atIndexPath:</code></em>方法被一遍又一遍地调用。这是第二次发生这种情况。这是否意味着我不能“分离”<code>DataSource</code>?或者<strong><em>不可能</em></strong>在 <code>UITableViewCell</code> 中添加 <code>UICollectionView</code>。或者,我是否使用了不好的方法?有没有办法做到这一点? </p>

<p>我对此感到非常困惑......</p>

<p>谢谢你们!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我为此苦苦挣扎了很长时间,花了几个小时重新设计布局等。
我终于得到了解决方案:</p>

<p>这是我的单元格的头文件</p>

<pre><code>@interface MyCustomTableViewCell : UITableViewCell
@property (strong, nonatomic) IBOutlet UILabel *someLabel;
@property (strong, nonatomic) IBOutlet UICollectionView *collectionView;

-(void)setImages:(NSArray*)images;
@end
</code></pre>

<p>这就是实现文件(m)之外的魔法</p>

<pre><code>@interface MyCustomTableViewCell() &lt;UICollectionViewDataSource, UICollectionViewDelegate&gt;
@property (strong, nonatomic) NSArray *imageArray;
@end
@implementation MyCustomTableViewCell
-(void)setImages:(NSArray*)images{
_imageArray = images;
;
;
;
}

#pragma mark - UICollectionViewDataSource Methods
...
...
...
#pragma mark - UICollectionViewDelegate Methods
...
...
...
@end
</code></pre>

<p>使用上述方法使 CollectionView 显示并显示其内容。我还想在 CollectionView 中添加一个 Action ,例如,当单击图像时显示 <strong>MWPhotoBrowser</strong>,我在单元格的 Header 文件中添加了一个方法:</p>

<pre><code>-(void)setViewController:(UIViewController*)viewController;
</code></pre>

<p>在实现文件上设置它并在委托(delegate)方法上调用 <strong>MWPhotoBrowser</strong>。我知道这很奇怪,因为它迫使我使用 Cell 来显示 DataSource 和 Delegate。当我应该能够在其他点回收我的 DataSource 和 Delegate 时,很奇怪。但它奏效了!!</p>

<p>谢谢你们!</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - UITableViewCell 中的 UICollectionView,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/25999400/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/25999400/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - UITableViewCell 中的 UICollectionView