在自定义的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一个还不存在的对象。 但是,你可以伪造它。
- 创build一个与新视图控制器中的button相同的占位符button。
- 将它animation到正确的位置。
- 当目标视图控制器进来时,它的button应该是不可见的。
- 在视图控制器就位之后(即,已经完成),目标视图控制器可以确保其button的正确位置,并使其实际button可见。
希望这可以帮助。