0

我正在使用 Storyboard 在单元格内创建 UICollectionViewController - CollectionView - Cell(我自己的 DasboardsViewCell)和我的客户视图(DashBoardView)。我正确连接了所有东西,除了上下滚动之外,一切似乎都正常工作。我会在调试后解释我的理解。

此外,我的 DashBoardView 自定义视图中有 2 个视图,我使用“一个”作为主要主视图,其他视图作为 FlipView(例如,当用户点击单元格时)。由于所有内容都是从情节提要中连接的,因此我不必为重用而注册类。

1)在我的 DashboardCustomView 中(上面还有其他 2 个视图)我这样做

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        _isPrimary = YES;
         //to init my 2 child views and insert to main custom view
        [self initSubViewsWithInsert]; 
}
return self;

}

2)在我的 DashBoardViewCell 类中,我这样做

@synthesize dashBoardView = _dashBoardView;

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        self.backgroundColor = [UIColor colorWithWhite:0.75f alpha:0.6f];
        self.layer.borderColor = [UIColor blackColor].CGColor;
        self.layer.borderWidth = 2.0f;
        self.layer.cornerRadius = 7.0f;
    }
return self;
}

// If I dont do this below I get overlapped images and data on cell when scrolling up and down
- (void)prepareForReuse
{
    self.dashBoardView.mainContainerView = nil;
    self.dashBoardView.flipView = nil;
}

3)现在在这之后我仍然看到自定义视图出现乱序并且似乎比不对我的视图执行“nil”要好一些,但问题是一旦我将我的 2 个子视图归零后,当我的collectionview 控制器重新排列单元格并开始添加我的内容。

即我喜欢这个 cellForItemAtIndexPath

if ([cell isKindOfClass:[DashboardsViewCell class]]) {
    DashboardsViewCell *dashCell = (DashboardsViewCell*) cell;
    Dashboard* tmpDashboard = self.availableDashBoards[indexPath.item];
    [dashCell.dashBoardView addDashboardImageViewAtPoint:tmpDashboard.identifier
                                          usingIndexPath:indexPath];

上面的最后一行是在仪表板主视图上添加一些图像和文本,它是 self.dashBoardView.mainContainerView,它已经为零。

有人可以帮助我了解是否有明确的方法来做到这一点。另外,如果您认为我正在寻找错误的问题

4

2 回答 2

0

我不确定到底是什么问题,并且使用该代码很难说。如果您可以将项目发布到某个地方会更容易。现在很多事情都被故事板化了,仅仅通过发布代码来解决问题就更难了:(

但是您是否有机会使用自动布局?

于 2013-04-27T17:27:43.710 回答
0

感谢您的回复 - 不,我没有使用自动布局,我无法在此处发布我的代码,因为它现在变得太大了,但这是我为解决问题所做的

1)我意识到当单元格被刷新(出队)时,我的逻辑是这样的,即我实际上是在维护某个单元格的状态(用户从 A、B、C、D 等点按仪表板-B),而我自己的内部状态认为同一个单元格将应用于相同的 indexPath。IE

a)如果用户点击单元格 2 - 我切换到辅助视图并在我的单元格中保持该状态。

b)现在,如果用户上下滚动,则单元格会刷新,我会在 prepareForResuse 中释放我的内部视图

一旦我知道我做错了什么,我必须改变我的方法并移动控制器中的逻辑。

我在这里可能听起来晦涩难懂,但我发现我对单元格 cellForItemAtIndexPath 及其应该做什么的假设是错误的。一旦我弄清楚了,我就能够修复我的设计。

于 2013-04-30T02:00:12.760 回答