在视图控制器之间设置UIImageView.image

时间:2014-01-10 00:24:51

标签: ios objective-c class storyboard segue

我正在试图找出...如果我在viewcontroller1(VC1)并且我运行了NSTimer,那么100秒后图像将在viewcontroller1(VC2)中设置然后我显示VC2(模态) 10秒后再等待90秒我怎样才能从VC1的.m文件中设置当前显示的VC(VC2)上的图像(并且已经持续了大约90秒)?

我在网上找到了一些方法(经过一个小时的搜索),通过传递带有@property nonatmoic的UIImage来设置图像,保留......但即便如此,所有这些示例代码只是告诉我如何设置数据,我仍然需要在VC2中运行单独的NSTimer或其他一些功能,不断检查这个变量是否已经更新,然后在VC2的.m中我将UIImageView的UIImage设置为图像(@property strong那是通过了。

无论如何,在我所能找到的每一种情况下,这都是在“准备赛段”部分期间完成的......

VC1的.m无法改变VC2中UIImageView的图像吗?或者是从VC1 prepare for segue之后更改UIImageView以实际从VC2的.m文件中执行此操作的唯一方法吗?


简而言之,我想从VC1更改VC2的 UIImageView的图像 ...而不是从VC1更改VC2的 UIImage 。我想在我接触到新的VC之后做这个方式,但我仍然在后台运行旧VC中的代码

2 个答案:

答案 0 :(得分:1)

风险投资有很多种方式可以沟通。最简单的是,VC1可以保留指向VC2的指针,VC2可以提供对它的imageView的公共访问。

这不是特别好的设计,因为它建立在两个VC之间的依赖关系中,但它的外观如下:

// vc1.m
#import "VC2.h"

@interface VC1 ()
@property (nonatomic, strong) VC2 *myVc2;
@end

- (void)presentVC2 {
    // allocate init VC2 however you do that
    VC2 *vc2 = [[VC2 alloc] init // ...

    // keep a pointer to it
    self.myVc2 = vc2;

    // do whatever you do to present it, navigation vc push, or presentViewController, etc.
}

- (void)timerFired:(NSTimer *)timer {

   // not sure from your question if you have the image at this point or if you
   // start a fetch for the image here.  let's say you have it
   UIImage *image = [UIImage imageNamed:@"someimageinmyappbundle.png"];
   self.myVc2.publicImageView.image = image;
}

如果VC2提供对它的UIImageView的公共访问,这是有效的:

// VC2.h
@interface VC2 : UIViewController

// assuming you painted it in a storyboard or xib
@property(weak, nonatomic) IBOutlet UIImageView *publicImageView;

@end

请注意,我不是说我喜欢这个,但它是从A点到B点的最直线。一个更好的模式可能是VC1通过NSNotification宣布图像的准备就绪,对于VC2倾听并设置它自己的形象。但问题似乎是坚持VC1在VC2视图层次结构上完成工作。

答案 1 :(得分:0)

如果您还没有这样做,可以导出(制作属性)imageView。 请注意您的原始假设 - 如果您的图像是属性,您可以创建自己的setter,并在VC2设置图像时执行任何操作。