iphone开发:从不同的ViewController访问对象

iphone开发:从不同的ViewController访问对象,iphone,objective-c,ios,imageview,viewcontroller,Iphone,Objective C,Ios,Imageview,Viewcontroller,在我的应用程序中,我有一个问题,听起来很简单,但我无法解决它。嗯,情况是这样的 我有两个视图控制器。VC1和VC2。在VC1中,我有一个按钮和一个imageView。按下该按钮时,imageView将随着动画从左向右移动,VC2将由pushtoViewController打开。在VC2中还有一个按钮,它是一个后退按钮,当按下它时,它应该打开第一个VC1,图像应该从右向左移动 我可以使用PopViewController打开VC1,但是我无法从VC2控制imageview,因此我可以从右向左设置动

在我的应用程序中,我有一个问题,听起来很简单,但我无法解决它。嗯,情况是这样的

我有两个视图控制器。VC1和VC2。在VC1中,我有一个按钮和一个imageView。按下该按钮时,imageView将随着动画从左向右移动,VC2将由pushtoViewController打开。在VC2中还有一个按钮,它是一个后退按钮,当按下它时,它应该打开第一个VC1,图像应该从右向左移动


我可以使用PopViewController打开VC1,但是我无法从VC2控制imageview,因此我可以从右向左设置动画。如何从VC2访问VC1的图像视图?

这是如何在VC1中调用VC2:

  VC2 *vc2 = [[VC2 alloc] initWithNibName:@"VC2" bundle:nil ];
  vc2.delegate = self; // here you set the delegate for the coming back call
  [self presentModalViewController: vc2 animated: YES]; // or however you present your VC2
这就是你如何从vc2回到vc1,你呼叫:

[self.delegate vc2HasFinished];
要使其工作,您需要创建如下协议: 在
VC2Protocol.h

 @protocol VC2Protocol <NSObject>
    -(void)vc2HasFinished;
    @end

这是苹果公司推荐的最干净的方法——看起来很笨重——我同意——但它可以工作,而且你会习惯的:-)

这就是如何在VC1中调用你的VC2:

  VC2 *vc2 = [[VC2 alloc] initWithNibName:@"VC2" bundle:nil ];
  vc2.delegate = self; // here you set the delegate for the coming back call
  [self presentModalViewController: vc2 animated: YES]; // or however you present your VC2
这就是你如何从vc2回到vc1,你呼叫:

[self.delegate vc2HasFinished];
要使其工作,您需要创建如下协议: 在
VC2Protocol.h

 @protocol VC2Protocol <NSObject>
    -(void)vc2HasFinished;
    @end

这是苹果公司推荐的最干净的方法——它看起来很麻烦——我同意——但它可以工作,而且你会习惯的:-)

第一个答案非常正确,但我有另一个解决方案

您可以使用以下内容覆盖VC1的
视图显示:
消息:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    if (imageView.frame.origin.x > 0.0) {
        // make your animation here
    }
}

第一个答案很正确,但我有另一个解决办法

您可以使用以下内容覆盖VC1的
视图显示:
消息:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    if (imageView.frame.origin.x > 0.0) {
        // make your animation here
    }
}

您可以向VC2添加一个委托方法,在弹出VC2时调用该方法。使VC1成为VC2的代理并将动画写入此代理方法应该可以工作。您可以向VC2添加一个代理方法,在弹出VC2时调用该方法。使VC1成为VC2的代理并将动画写入此代理方法应该可以工作。DismissViewControllerAnimated:建议使用完成方式。DismissModelViewControlleranimated已被弃用。谢谢-当然你是对的-我修改了答案以反映新的方式…DismissViewControllerAnimated:建议使用完成方式。DismissModelViewControlleranimated已被弃用。谢谢-当然你是对的-我修改了答案以反映新的方式。。。