iOS - 执行 block 后从 heightForRowAtIndexPath 返回值

标签 ios objective-c callback block heightforrowatindexpath

我是 iOS 开发新手,在我的应用程序中,我需要在 heightForRowAtIndexPath 方法中计算动态表格单元格的高度。

问题是我不想在“回调” block 完成之前返回值。在 objective-c 中有没有办法做到这一点?

这是我的方法实现:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    ...
    SDImageCache *imageCache = [[SDImageCache alloc] init];
    [imageCache queryDiskCacheForKey:model.thumbnail done:^(UIImage *image, SDImageCacheType cacheType)
     {

         // do calculations with height etc.
         // got an error "incompatible block pointer types sending"
         return value;
     }];
}

最佳答案

您要么必须同步运行 block (即,阻塞主线程直到 block 完成)然后返回它,要么您需要将计算出的高度存储在存储中并重新加载单元格。第二个选项是首选,因为您不会阻塞主线程和 UI。您可以在占位符单元格上显示加载指示器,一旦获得所有必需的信息,重新加载单元格并正确显示它。您可以指定一个动画,让用户可以平滑地进行重新加载过渡。

关于iOS - 执行 block 后从 heightForRowAtIndexPath 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23443711/

相关文章:

ios - Xcode 6.2 beta 4 是否让 watchKit 接口(interface)与页面无法打开推送接口(interface)?

ios sqlite3链接错误

objective-c - CGFloat 显示错误

objective-c - XCode 文档 - 离线阅读

javascript - 自执行函数中的参数是否必要?

JavaScript setTimeout() 不会等待执行?

ios - 重新安装后无法在 macOS 上使用 `-R` 递归更改权限

ios - 为什么我的线不旋转? -- CGContextRotateCTM

objective-c - 防止 CABasicAnimation 中图层消失的正确方法?

javascript - 为什么在第一个 Promise 解析之后执行链式 Promise 后排队的微任务而忽略链式 Promise?