如果单元格的图像是坏图像,我正在尝试从UITableView中删除单元格。基本上我的代码对每个单元格的图像执行一个threadPool调用,以便在用户在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的数据中的所有图像,因为这可能是一个很大的性能,因为它可以很容易地成百上千个项目。我目前正在从Web服务中获取项目,这些项目为我提供了前200项。 如果数据== null 示例
,如何删除单元格altogtherNSUrl 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;
});
}
答案 0 :(得分:1)
您通过从源中删除单元格来删除单元格,然后通过调用UITableView
让ReloadData().
知道源已更改。这将触发刷新过程。 UITableView
会询问您的来源有多少行,并且因为您从数据中删除了一行,代表该行的单元格将会消失。
但是ReloadData()
会重新加载整个表格。有一种方法可以让你专门删除名为DeleteRows().
的单元格。你可以在Xamarin找到一个例子。
删除行时,首先更新模型,然后更新UI非常重要。
或者,我建议您查看MonoTouch.Dialog,它允许以更直接的方式与UITableView进行交互。它还包括对延迟加载图像的支持。