0

在我的应用程序中,我遇到了一个问题,这听起来很简单,但我无法解决。好吧,情况就是这样。

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

我可以使用 PopViewController 打开 VC1,但是我无法从 VC2 控制图像视图,因此我可以从右到左对其进行动画处理。如何从 VC2 访问 VC1 的 imageView?

4

2 回答 2

4

这是在 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

然后将其包含 VC2Protocol.h在 VC1 和 VC2 中。在 VC1 中你必须像这样定义这个方法:

-(void) weitereRufNrVCDidFinish{
    [self dismissModalViewControllerAnimated:YES completion: nil];

}

这是 Apple 最干净和推荐的方式 - 它看起来很麻烦 - 我同意 - 但它有效并且你已经习惯了 :-)

于 2012-09-02T16:49:58.913 回答
1

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

您可以使用以下内容覆盖 VC1 的viewDidAppear:消息:

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

    if (imageView.frame.origin.x > 0.0) {
        // make your animation here
    }
}
于 2012-09-03T02:09:26.297 回答