我正在试图找出...如果我在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中的代码
答案 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设置图像时执行任何操作。