【问题标题】:MonoTouch.Dialog ImageLoader in GetCellGetCell 中的 MonoTouch.Dialog ImageLoader
【发布时间】:2012-11-15 01:40:52
【问题描述】:

我有一个带有自定义元素的 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 回调中,如何访问正确的单元格来更新图像?

【问题讨论】:

    标签: xamarin.ios monotouch.dialog


    【解决方案1】:

    我建议你继承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

    【讨论】:

      【解决方案2】:

      我喜欢 Krumelur 的回答。

      也就是说,这是一个很好的观察:元素可能在任何时间点都没有活动单元格。在这些情况下,这意味着该元素尚未在屏幕上可见。

      当请求单元格时,您可以做的一件事是将单元格保存为字段,然后再访问它。诀窍是,当图像出现时(比如从现在起 30 秒),您的元素可能已超出屏幕,并且您的单元格将无效,因此您将更新其他人的单元格。因此,您需要跟踪该单元格是否仍链接到您的元素并手动处理。

      【讨论】:

        猜你喜欢
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多