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

Ios 在视图控制器之间设置UIImageView.image,ios,objective-c,class,storyboard,segue,Ios,Objective C,Class,Storyboard,Segue,我想弄明白。。。如果我在viewcontroller1(VC1)中,并且有一个NSTimer正在运行,这样在100秒后,图像将在viewcontroller1(VC2)中设置,然后在10秒后显示VC2(模式),然后再等待90秒,我如何从VC1的.m文件设置当前显示(并且已持续约90秒)的VC(VC2)上的图像 我在网上找到了一些方法(搜索了一个小时后),可以通过使用@property nonatamoic,retain。。。但即使如此,所有这些示例代码都只是向我展示了如何设置数据,我仍然需要在V

我想弄明白。。。如果我在viewcontroller1(VC1)中,并且有一个NSTimer正在运行,这样在100秒后,图像将在viewcontroller1(VC2)中设置,然后在10秒后显示VC2(模式),然后再等待90秒,我如何从VC1的.m文件设置当前显示(并且已持续约90秒)的VC(VC2)上的图像

我在网上找到了一些方法(搜索了一个小时后),可以通过使用@property nonatamoic,retain。。。但即使如此,所有这些示例代码都只是向我展示了如何设置数据,我仍然需要在VC2中运行一个单独的NSTimer或其他函数,不断检查此变量是否已更新,然后在VC2的.m中,我将UIImageView的UIImage设置为传递的映像(@property strong)

在任何情况下,在我能找到的每一个案例中,这总是在“为赛格做准备”部分中完成的

从VC1的.m中是否有办法更改VC2中UIImageView的图像?或者,在VC1中的
准备segue
之后,将UIImageView更改为从VC2的.m文件中实际执行的唯一方法是什么


简言之,我想将VC2的图像从VC1更改为UIImageView的图像。。。不从VC1更改VC2的UIImage。在我切换到新的VC之后,我想这样做,但是我仍然在旧VC的后台运行代码,如果您还没有这样做,您可以导出(创建属性)imageView。
请注意您最初的假设-如果您的图像是一个属性,则您可以创建自己的setter,并在VC2设置图像时执行任何您想执行的操作。

VCs有许多沟通方式。最直截了当的是,VC1可以保留一个指向VC2的指针,而VC2可以提供对其imageView的公共访问

这不是一个特别好的设计,因为它构建了两个VCs之间的依赖关系,但下面是它的外观:

// 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视图层次结构上工作。

我想您使用的是
UINavigationController
?这样,它有一个名为'-topViewController'的属性。它将返回VC2的实例。你可以在VC1中完成。然后将返回的指针(
UIViewController
)强制转换到VC2类,并使用公共接口访问VC2的
UIImageView
。如果您在演示VC2时未使用
UINavigationController
,则可以通过
-[VC1 presentedViewController]
method@art-divin没有使用UINavController。。。我对你提到的第二种方法感兴趣。。。所以在VC1中,我说的是类似于
[self-presentedViewController].NameOfVC2ImageViewProperty.image=someUIImage
@art divin但是,当然,我得到一个错误,说它不知道一个名为
的属性。UIViewController的VC2ImageViewProperty的NameOfVC2ImageViewProperty
。。。那么我如何使用你提到的方法呢?谢谢:)将指针设置为strong是我错过的。。。ARC一直在摆脱它哈哈!我只是用NSNotificationCenter来代替。。工作起来很有魅力!在主线程上只需要一行代码就可以向我所有的VCs发送一个对象!很高兴它成功了,特别是很高兴您选择了NSNotificationCenter.:-)