有没有办法为ImageLoader设置默认图像?

时间:2012-05-08 16:42:15

标签: xamarin.ios monotouch.dialog

我在我的应用中使用MonoTouch.Dialog;但是,有问题的表单是使用UIViewController实现的,我在其中添加了一个TableView(所以我也可以添加一个UIToolbar)。

我喜欢MonoTouch.Dialog.Utilities中的ImageLoader,并尝试在DataView的GetCell()方法中使用它,以便TableView从URL渲染图像。

                var callback = new ImageLoaderCallback(controller, cell.ImageView, indexPath);  // ImageLoaderCallback implements IImageUpdated
                cell.ImageView.Image = ImageLoader.DefaultRequestImage(new Uri(picFV.Value), callback);

问题是,在下载URL之前,ImageView的空间将被折叠(以便图像右侧的文本实际上锚定在表格的左侧)。

我想要做的是显示一个与下载图像尺寸相同的临时本地图像,这样当ImageLoader完成检索和渲染图像时,用户体验就不那么刺耳。

我尝试在GetCell()调用中执行以下操作... cell.ImageView.Image设置为其他一些图像(下面未显示),然后我获得对ImageLoader.DefaultRequestImage返回的内容的引用。

                var image = ImageLoader.DefaultRequestImage(new Uri(picFV.Value), callback);
                callback.Image = image;

最后一行将ImageLoader返回的图像引用填充到回调状态,当ImageLoader完成时,回调将替换单元格的ImageView.Image :(见下文):

    // callback class for the MonoTouch.Dialog image loader utility
    private class ImageLoaderCallback : IImageUpdated
    {
        private ListViewController controller;
        private UIImageView imageView;
        private NSIndexPath indexPath;

        public ImageLoaderCallback(ListViewController c, UIImageView view, NSIndexPath path)
        {
            controller = c;
            imageView = view;
            indexPath = path;
        }

        public UIImage Image { get; set; }

        void IImageUpdated.UpdatedImage(Uri uri)
        {
            if (uri == null)
                return;
            if (Image != null)
                imageView.Image = Image;
            // refresh the display for the row of the image that just got updated
            controller.TableView.ReloadRows(new NSIndexPath [] { indexPath }, UITableViewRowAnimation.None);                
        }
    }

然而,这不起作用,因为看起来ImageLoader在尝试渲染其ImageView时需要被TableView“拉”(即ImageLoader回调永远不会被调用,因为没有人拉动URL)。

如何完成此方案?

谢谢!

1 个答案:

答案 0 :(得分:1)

我知道这是一个古老的问题,但是在搜索同样的事情时我遇到了它,并且看到了以下博客文章,其中说明了如何实现这一目标。我还没有尝试过,但希望它可以帮助你或其他任何人在将来遇到这个问题:http://yusinto.blogspot.co.uk/2012/05/background-image-downloading-with.html