我有一个带有自定义元素的MonoTouch.Dialog视图控制器。我的元素实现了IImageUpdated。在GetCell方法中,我正在加载图像......
var logo = ImageLoader.DefaultRequestImage (new Uri (url), this);
if (logo == null) {
cell.ImageView.Image = _defaultImage;
} else {
cell.ImageView.Image = logo;
}
#region IImageUpdated implementation
public void UpdatedImage (Uri uri)
{
// HOW DO I GET THE CELL HERE?
//cell.ImageView.Image = ImageLoader.DefaultRequestImage(uri, this);
}
#endregion
在UpdatedImage回调中,如何访问正确的单元格以更新图像?
答案 0 :(得分:0)
我建议您将UITableViewCell
作为子类ImageCell : UITableViewCell
。
然后创建一个继承自UIView(ImageCellView : UIView, IImageUpdate
)并实现IImageUpdated
的类。
在GetCell()
中,您将返回单元格的一个实例,并将ID或其他内容传递给您的单元格。
ImageCellView
实例已添加到单元格ContentView
中。
然后每个视图都应该很好地知道要加载什么以及要更新什么以及所有内容都被封装。
您可以在Miguel的TweetStation代码中看到一个示例:https://github.com/migueldeicaza/TweetStation/blob/master/TweetStation/UI/TweetCell.cs#L216
答案 1 :(得分:0)
我喜欢Krumelur的回答。
尽管如此,这是一个很好的观察:元素可能在任何时间点都没有活跃的细胞。在这些情况下,这意味着该元素尚未在屏幕上显示。
在请求单元格时,您可以做的一件事是将单元格保存为字段,然后再访问它。但诀窍在于,当图像出现时(比如说从现在起30秒),你的元素可能会出现在屏幕之外,而你的单元格将无效,所以你会更新其他人的单元格。因此,您需要跟踪该单元仍然链接到您的元素并手动处理它。