我正在开发一个聊天应用程序。我不想在滚动时重新加载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.check
为YES
),当我收到消息时,它显示在左侧(self.check
是NO
)但问题是当我scrolling
时,tableview
重新加载自身并在左侧显示整条信息(发送或接收),因为self.check
是NO
}。
如何阻止这种情况发生?
答案 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!
}
我很高兴这对你有所帮助。