滚动时禁用表视图重新加载

时间:2016-05-02 12:01:01

标签: ios objective-c uitableview tableviewcell

我正在开发一个聊天应用程序。我不想在滚动时重新加载tableview

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

        @try {

            static NSString *cellIdentifier=@"cell";
            MessageCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
            if(cell==nil)
            {
                cell=[[MessageCell alloc]initMessagingCellWithReuseIdentifier:cellIdentifier];
            }
            if(self.check)
            {
                cell.sent=YES;
                cell.messageLabel.text=[self.sendArray objectAtIndex:indexPath.row];
            }
            else
            {
                cell.sent=NO;
                cell.messageLabel.text=[self.sendArray objectAtIndex:indexPath.row];
            }
            cell.timeLabel.text=@"27-04-2016";
            cell.backgroundColor=[UIColor clearColor];
            return cell;
        }
        @catch (NSException *exception) {
        NSLog(@"Error in func:%s, line:%d with reason:%@",__func__,__LINE__,exception.reason);

        }

}

当我发送消息时,它显示在右侧(self.checkYES),当我收到消息时,它显示在左侧(self.checkNO )但问题是当我scrolling时,tableview重新加载自身并在左侧显示整条信息(发送或接收),因为self.checkNO }。

如何阻止这种情况发生?

3 个答案:

答案 0 :(得分:1)

在MessageCell类中,必须覆盖prepareForReuse()方法并重置所有标志。 当我们滚动tableview时,它重用了构造的单元格。因此,它也重用了标志。这是示例

override func prepareForReuse() 
{
    super.prepareForReuse();
    currencyCodeLbl.text = nil;
    currencyNameLbl.text = nil;
    isSelf = false;
    flagImage.hnk_cancelSetImage();
    flagImage.image = nil;
}

答案 1 :(得分:0)

首先,您应该创建一个实例属性来跟踪tableView状态。根据此属性的值,您可以重新加载或不重新加载表格视图(无论您在代码中的哪个地方,都要执行此操作)。

@property (assign, nonatomic) BOOL isTableViewScrolling;

要跟踪某人是否正在拖动/滚动表格视图,您可以使用scrollView委托方法:

scrollViewWillBeginDragging:

scrollViewDidEndDecelerating:

并相应地设置isTableViewScrolling

答案 2 :(得分:0)

Self.check应该是一个数组,它应该是每一行的特定值。所以你可以检查它:

if(self.check[indexPath.row]) {
    // Do something!
}

我很高兴这对你有所帮助。