如何替换模态视图控制器?

4

我正在使用模态视图控制器,允许用户选择通讯录条目和电子邮件地址。通过presentModalViewController:animated显示ABPeoplePickerNavigationController对象:

[self presentModalViewController:picker animated:YES];

我想要做的是保持模态对话框,但当用户选择电子邮件地址时,它应该交叉淡入到显示消息组合窗口的不同控制器中。
我已经在“peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier:”中尝试了各种方法来关闭选择器并将我的自定义组合控制器设置为模态视图。我可以用任何方式做到这一点,但从选择器到组合控制器的过渡从未平滑进行 - 除非我将组合控制器设置为选择器的模态对话框,在这种情况下,当我关闭组合控制器时选择器会重新出现。我也不想要那样。
必须有一种平滑地替换一个控制器及其视图为另一个控制器及其视图的方法,所有这些都在模态对话框的上下文中,并最好具有交叉淡入淡出效果。非常感谢建议。
1个回答

1
将组合控制器添加为选择器的子视图。将其alpha设置为0,使其透明。然后使用动画块逐渐将其alpha动画到完整状态:
// Initially set alpha to 0    
[myCompositionView setAlpha:0];

// Later when you want to show the view, animate the alpha to 1.0
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[myCompositionView setAlpha:1.0];
[UIView commitAnimations];

但是如果我这样做,当我完成组合控制器时,选择器将重新出现并且也需要被解除。我想要的是选择器似乎被组合控制器替换,这样当我解除作曲家时,我看到的是原始父级 - 没有选择器。 - theory
由于组合视图是选择器的子视图,因此当您关闭选择器时,组合视图也将消失。只需确保解除组合视图的操作告诉父视图解除模态视图控制器。 - pheelicks
啊!感谢您提供的额外见解。我现在为作曲家添加了一个委托接口,并将主视图控制器指定为委托。然后它实现了 composeViewControllerDidFinish: 方法,该方法移除了选择器模态视图,从而同时关闭它们。顺便说一下,我没有使用动画块,而是将 modalTransitionStyle 设置为 UIModalTransitionStyleCrossDissolve,呈现作曲窗口,然后将其设置回 UIModalTransitionStyleCoverVertical。这允许淡入到作曲家中工作,当它被关闭时,它再次向下滑动。效果非常好! - theory

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接