我的<%= f.date_select :start_date, :label => "When does this project begin?", 'data-behaviour' => 'datepicker', order: [:day, :month, :year] %>
,滚动时滞后。这是我的代码:
UITableView
我的方法从文档方向获取图像:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
CellListsFriend *cell = [tableView dequeueReusableCellWithIdentifier:@"cellListsFriend" forIndexPath:indexPath];
if (!cell.selected) {
cell.accessoryType = UITableViewCellAccessoryNone;
}
ContactAlphaB *contact = [self objectAtIndexPath:indexPath];
NSMutableAttributedString *strFullname;
if (strFullname == nil) {
strFullname = [NSString DrawColorForFullname_firstName:contact.firstName lastName:contact.lastName];
}
cell.lblNameFriend.attributedText = strFullname;
cell.lblStatusSentense.text = contact.usernameIsUsing;
[cell.lblStatusSentense setTextColor:[SomeMethods_TrinhVM TrinhVM_colorWithHexString:color_status_ShowUser]];
if ([contact.registerType isEqualToString:@"1"]) {
cell.lblRegisterType.text = @"Email";
}
else{
cell.lblRegisterType.text = @"Mobile";
}
[NSURLConnection getImage:contact.linkAvatar showImage:cell.imgAvatarFriends];
[cell.lblRegisterType setTextColor:[SomeMethods_TrinhVM TrinhVM_colorWithHexString:@"777777"]];
// Rounded Rect for cell image
cell.imgAvatarFriends.layer.borderWidth=2;
cell.imgAvatarFriends.layer.borderColor=[[UIColor whiteColor]CGColor];
[cell.imgAvatarFriends.layer setCornerRadius:cell.imgAvatarFriends.frame.size.width/2];
[cell.imgAvatarFriends.layer setMasksToBounds:YES];
return cell;
}
我已经研究过并使用过:
+(UIImageView *)getImage:(NSString*)strImageName showImage:(UIImageView*)showImage{
NSString* fileName = [NSString stringWithFormat:@"%@",strImageName];
NSArray *arrayPaths =
NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory,
NSUserDomainMask,
YES);
NSString *path = [arrayPaths objectAtIndex:0];
NSString* pdfFileName = [path stringByAppendingPathComponent:fileName];
NSData *data = [NSData dataWithContentsOfFile:pdfFileName];
UIImage *image1 = [UIImage imageWithData:data];
showImage.image = image1;
return showImage;
}
我的代码已编辑如下:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
它不会滞后,但会移动单元格的位置。如何解决这个问题?
答案 0 :(得分:0)
dispatch_async(queue, ^{
cell.lblNameFriend.attributedText...
etc.
}
<强>风险强>
看起来非常危险:你基本上是在事实后更改的单元格内容。您正在修改的单元格可能不是原始单元格,它可能已经被重用。如果你没有使用dequeueReusableCellWithIdentifier
,基本上允许系统缓存单元格,并按照恰当的名称回收它们,这种方法就可以工作。
<强>安全强>
正确的方法接近但与你正在做的完全相同。您可以继续利用dequeueReusableCellWithIdentifier
,但是当数据(图像等)可用时,您需要触发重新加载单元格。
换句话说,当您从以下位置返回单元格时
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
您可能无法保留指向该单元格的指针供以后使用。但是,当数据可用时,您可以要求系统根据需要多次重绘该单元格。