UITableView“cellForRowAtIndexPath”方法突然被调用两次

Posted

技术标签:

【中文标题】UITableView“cellForRowAtIndexPath”方法突然被调用两次【英文标题】:UITableView "cellForRowAtIndexPath" method gets called twice on a swipe abruptly 【发布时间】:2011-06-03 07:51:44 【问题描述】:

我认为我们中的许多人都在UITableView 委托方法- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 上遇到过这个问题,该方法被调用了两次。

在我的应用程序中,我转换了 tableView。代码是:

    CGAffineTransform transform = CGAffineTransformMakeRotation(-M_PI/2);
theTableView.transform = transform;
    
    theTableView.rowHeight = self.bounds.size.width;

    theTableView.frame = self.bounds;

现在在委托方法中我做了几件事:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath 
        
    
    modelRef.currentCellAtIndexPathRow = indexPath.row;
    
    static NSString *CellIdentifier = @"Cell";
    
    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
            
    if (cell == nil) 
    
        cell = [[[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier frame:self.bounds] autorelease];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    
    
                
    modelRef.currentPageIndex = (indexPath.row + 1);
    
    [cell showPage];

    NSLog(@" visible cell %i ",[[tableView visibleCells] count]);

        
    return cell;

一次可见 1 个单元格,但在应用程序启动时第一次可见。日志显示可见单元格 0。

很多时候这个特定的委托方法会被突然调用两次。

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

我认为立即修复只是设置一个标志,该标志在第一次被击中时会改变,所以你忽略第二次调用。这可能不是完美的解决方案,我不能告诉你为什么它会被击中两次——但这会奏效。 (当我从 UIWebView 类实现 Apple 委托时,我遇到了完全相同的行为)

编辑:

在类头中创建一个BOOL 成员,然后在init 中将值设置为YES。因此,如果 BOOL 被称为 mbIsFirstCall,例如,在您的委托方法中,请执行以下操作:

if (mbIsFirstCall)

    // do your processing, then the line below
    mbIsFirstCall = NO;

else

    // you don't need this else, but just for clarity it is here.
    // you should only end up inside here when this method is hit the second time, so we ignore it.

【讨论】:

谢谢。你能给出一个代码示例,正是你的意思吗? 再次感谢。我之前试过这个。在这种情况下,第一次滑动时,mbIsFirstCall 将设置为 NO。我认为这是一次检查,变量是否随时更改为 YES?否则在每次 else 语句都会遇到。如果我错了,请纠正我。 @iWasRobot 如果您对答案感到满意,请记得投票或接受它。 :) 很高兴它为你解决了!

以上是关于UITableView“cellForRowAtIndexPath”方法突然被调用两次的主要内容,如果未能解决你的问题,请参考以下文章

iOS 在 UIImageView 顶部淡入黑色

在 ViewWillAppear 完成运行之前调用 CellForRowAtIndexPath

在 UITableViewCell 中调整 UITextView 的大小

UITableViewCell 中的 UIButton 不可点击

奇怪的行为设置 tableView 行高和 scrollPosition Swift

ios表格视图单元格按行索引顺序加载图像