在自定义的segue中使用destinationViewControllerbutton

我的目标是定制一个自定义的animation,如下所示:我想让segue用sourceViewController中的一个button来覆盖一个来自destinationViewController的button,其效果类似于导航控制器的推动效果,即新button应该是将旧的button从右向左推。

我已经能够使旧button(从sourceViewController)按需要移开:

[UIView animateWithDuration:1.0 animations:^{ // set the target frame for animated view sourceViewController.optionsButton.frame = leftButtonTargetFrame; } completion:^(BOOL finished) { [navigationController pushViewController:destinationViewController animated:NO]; // reset the button's frame back to its original frame sourceViewController.optionsButton.frame = leftButtonInitFrame; }]; 

但我努力使新的button(从destinationViewController)进来。原因是, 我无法访问destinationViewController的视图元素 :执行segue时,他们没有实例化。 而且我不能animation一个没有实例化的button。

那么如何用sourceViewController中的buttonreplacesourceViewController中的button?

当您尝试访问button时,目标视图控制器的视图尚未初始化/加载。 要加载目标视图控制器的视图,您可以简单地访问视图属性。 在使用button之前执行此操作: [destinationViewController view];

destinationViewController.view; 也可以工作,但会产生编译器警告。

背景信息:

如果你访问视图属性,它的值目前为零,视图控制器会自动调用loadView方法并返回结果视图。

loadView方法加载控制器pipe理的视图。 你不应该直接调用这个方法。

你是正确的,你不能animation一个还不存在的对象。 但是,你可以伪造它。

  1. 创build一个与新视图控制器中的button相同的占位符button。
  2. 将它animation到正确的位置。
  3. 当目标视图控制器进来时,它的button应该是不可见的。
  4. 在视图控制器就位之后(即,已经完成),目标视图控制器可以确保其button的正确位置,并使其实际button可见。

希望这可以帮助。