【问题标题】:How do I replace a modal view controller?如何替换模态视图控制器?
【发布时间】:2010-03-29 06:04:45
【问题描述】:

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

[self presentModalViewController:picker animated:YES];

我想要做的是保持模式对话框,但是当用户选择电子邮件地址时,它应该交叉淡入淡出到显示消息撰写窗口的不同控制器。

我在peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier: 中尝试了各种方法来关闭选择器并将我的自定义组合控制器设置为模态视图。我可以通过多种方式做到这一点,但它永远不会从选取器平滑地淡出到合成控制器——除非我将合成控制器设为选取器的模态对话框,在这种情况下,当我关闭合成时选取器会重新出现控制器。我也不想这样。

必须有某种方法可以将一个控制器及其视图平滑地替换另一个控制器及其视图,所有这些都在模态对话框的上下文中,最好使用交叉淡入淡出。非常感谢您的建议。

【问题讨论】:

    标签: iphone uiviewcontroller modal-dialog addressbook fade


    【解决方案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];
    

    【讨论】:

    • 但是如果我这样做,当我完成组合控制器时,选择器将重新出现并且也需要被关闭。我想要的是让选择器似乎被组合控制器取代,这样当我解散作曲家时,我看到的是原始父级——根本没有选择器。
    • 由于合成视图是选择器的子视图,当您关闭选择器时,合成视图也会消失。只需确保关闭合成视图的操作告诉您的父视图关闭模态视图控制器
    • 啊!感谢您提供额外的见解。我现在为作曲家添加了一个委托接口,并将主视图控制器分配为委托。然后它实现了composeViewControllerDidFinish: 方法,该方法删除了选择器模式视图,从而将它们都解散了。 FWIW,我没有使用动画块,而是将modalTransitionStyle 设置为UIModalTransitionStyleCrossDissolve,显示撰写窗口,然后将其设置回UIModalTransitionStyleCoverVertical。这允许作曲家的淡入淡出工作,当它被解除时,它会再次向下滑动。效果很好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多