我有一个带有自定义元素的nonotouch.dialog视图控制器。我的元素实现了iimageupd。在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
在"更新图"回调中,如何访问正确的单元格以更新图像?
我建议您子类UITableViewCell
,例如ImageCell : UITableViewCell
。然后,您制作一个从UIVIEW(ImageCellView : UIView, IImageUpdate
)继承并实现IImageUpdated
的类。在该GetCell()
中,您返回单元的实例,然后将ID或其他任何内容传递给您的单元格。ImageCellView
实例添加到单元格的ContentView
中。然后,每个视图都应该很好地知道要加载什么,更新的内容以及所有内容都已封装。
您可以在Miguel的TweetStation代码中看到一个示例:https://github.com/migueldeicaza/tweetstation/blob/master/master/tweetstation/ui/tweetcell.cs#l216
我喜欢Krumelur的答案。
也就是说,这是一个很好的观察:元素在任何时间点可能都没有活性单元。在这种情况下,这意味着该元素在屏幕上尚不可见。
当请求单元格时,您可以做的一件事是将单元格保存为字段,然后访问它。诀窍是,到图像出现时(例如从现在开始30秒),您的元素可能不在屏幕上,并且您的单元格将无效,因此您将更新别人的单元格。因此,您将继续跟踪该单元格与您的元素链接并手动处理。