【问题标题】:Delete dynamic cell in GetCell method在 GetCell 方法中删除动态单元格
【发布时间】:2013-10-04 22:54:33
【问题描述】:

如果单元格的图像是坏图像,我正在尝试从 UITableView 中删除单元格。基本上,我的代码对每个单元格的图像进行线程池调用,以使绑定数据的流程在用户滚动时平滑,就像在 GetCell 方法中一样:

public override UITableViewCell GetCell (UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
{
 //other stuff
    ThreadPool.QueueUserWorkItem(new WaitCallback(RetrieveImage),(object)cell);
}

在该异步方法中,我调用 cell.imageUrl 属性并将其绑定到 NSData 对象,如下所示:

NSData data = NSData.FromUrl(nsUrl); //nsUrl is cell.imageUrl

从那里我知道如果 data==null 则在检索图像时出现问题,因此我想将其删除。我目前所做的是将 hidden 属性设置为 true,但这会留下一个空白区域。我想删除整个单元格,这样用户甚至都不知道它的存在。 我无法将单元格高度设置为 0,因为在 indexrowpath 启动 getcell 调用之前,我不知道 imageUrl 是否坏。我不想只检查绑定到 UITableView 的数据中的所有图像,因为这会对性能造成很大的影响,因为它很容易有一百个项目。我目前正在从一个提供前 200 个项目的网络服务中获取项目。 如果 data==null 示例

,如何删除单元格
NSUrl nsUrl = new NSUrl(cell.imageUrl);
NSData data = NSData.FromUrl(nsUrl);
if (data != null) {
     InvokeOnMainThread (() => {
    cell.imgImage = new UIImage (data);
    //cell.imgImage.SizeToFit();
});
 } else {
   //I tried the below line but it does't work, I have a cell.index property that I set in the getCell method
   _data.RemoveAt(cell.Index);//_data is the list of items that are binded to the uitableview
    InvokeOnMainThread (() => {
    //cell.Hidden = true;
   });
}

【问题讨论】:

    标签: ios objective-c uitableview xamarin.ios custom-cell


    【解决方案1】:

    您通过从源中删除单元格来删除它们,然后通过调用 ReloadData().UITableView 知道源已更改,这将触发刷新过程。 UITableView 将询问您的来源有多少行,因为您从数据中删除了一行,代表该行的单元格将消失。 但是ReloadData() 将重新加载您的整个表格。有一种方法可以让您专门删除单元格,名为DeleteRows().,您可以在Xamarin 找到一个示例。

    删除行时,请务必先更新模型,然后更新 UI。

    另外,我建议您查看MonoTouch.Dialog,它允许以更直接的方式与 UITableView 进行交互。它还包括对延迟加载图像的支持。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-30
      • 2016-07-28
      相关资源
      最近更新 更多