从一个ViewController获得一个图像,如何在另一个ViewController上显示它

时间:2016-12-20 16:51:38

标签: c# ios xamarin uiviewcontroller xamarin.ios

我有两个ViewController,一个叫做ListViewController,另一个叫做UploadViewController。 ListViewController是启动后的第一个视图,按下“new”按钮,它将跳转到UploadViewController。我的最后一个问题是:我通过UploadViewController.cs获得了一个图像,我想在ListViewController上显示它,我该怎么做?

我的方法是通过一个函数将UploadViewController下的图像传递给ListViewController。

在UploadViewController中,我定义了“listView”,它的类型是ListViewController,这样我就可以使用ListViewController中的函数了。 (这是我的目标,不确定这一步是否正确。)

ListViewController listView = new ListViewController((IntPtr)null);

然后在UploadViewController中,

protected void Handle_FinishedPickingMedia (object sender, UIImagePickerMediaPickedEventArgs e)
        {
            UIImage originalImage = e.Info[UIImagePickerController.OriginalImage] as UIImage;
            selectedImage = originalImage;
            listView.SetImage (selectedImage);
            this.imagePicker.DismissModalViewController (true); 
        }

实现 listView.SetImage(selectedImage)时,它将跳回ListViewController,并执行:

public void SetImage (UIImage image) 
        {
            imageView4.Image = image; //imageView4 is a imageView defined in mainStoryboard
        }

问题是:实施SetImage后应用程序将崩溃。信息显示未定义或处置的imageView4或ListViewController。但为什么?它们最初都是在mainStoryboard中创建的,何时处理?我怎么能避免这个?或者,我不应该只是跳回到viewController并改变它的外观而没有任何segue?

我会非常感谢您回答我的任何问题!谢谢!

2 个答案:

答案 0 :(得分:0)

您必须在Image中添加ListViewController框。应该看起来像这样:

Image img = new Image();
img.Name = "myImage";
listView.Add.Children(img);
myImage.ItemSource = imageView4;

答案 1 :(得分:0)

在" viewDidLoad"之后将图像分配给UIImageView。您的控制器,属于UIImageView。

例如,您可以创建私有变量,并存储该图像,直到调用viewDidLoad方法。

private UIImage imageToShow;

public void SetImage (UIImage image) 
{
     this.imageToShow = image; 
}

public override void ViewDidLoad ()
{
     base.ViewDidLoad ();
     this.imageView4.Image = this.imageToShow;
}