【问题标题】:Presenting ViewController behind another one在另一个 ViewController 后面展示 ViewController
【发布时间】:2010-11-24 02:59:24
【问题描述】:

我有一个图像选择器,它为另一个视图控制器(来自three20的TTMessageController)收集数据,我希望这个消息编辑器出现在图像选择器后面,所以当图像选择器滑出时,已经出现了带有预填充数据的消息控制器。

这样的代码

[self.navigationController presentModalViewController:composeController animated:NO];
[picker dismissModalViewControllerAnimated:YES];

反之亦然。该怎么办?如何在已经呈现的picker控制器后面呈现composeController

提前致谢。

【问题讨论】:

    标签: iphone objective-c iphone-sdk-3.0


    【解决方案1】:

    您需要将这些动画分开,这样它们就不会在同一个运行循环中执行。我遇到了操作系统不喜欢关闭和背靠背呈现模态视图的情况。

    试试这个:

    - (void)myCallbackMethod{
    
    [picker dismissModalViewControllerAnimated:YES];
    [self performSelector:@selector(presentMessage) withObject:nil afterDelay:0.25];
    
    
    }
    
    - (void)presentMessage{
    
    [self.navigationController presentModalViewController:composeController animated:YES];
    
    }
    

    【讨论】:

      【解决方案2】:

      您可以关闭图像选择器模态视图控制器,推送消息控制器(两者都带有动画:NO),然后使用 CATransition 执行您自己的类似 Cocoa 的动画,而不是尝试在选择器后面显示另一个 viewController图像选择器在屏幕外显示动画。

      【讨论】:

      • 这听起来很有趣,但是怎么做呢?我真的很感激一些帮助。
      • 大致:[picker dismissModalViewControllerAnimated:NO]; [self.navigationController pushViewController:messageController Animation:NO]; CATransition * t = [CATransition 过渡]; t.type = kCATransitionMoveIn; t.subtype = kCATransitionFromTop; [[self.navigationController 层] addTransition:t];
      • 我试过了,还是不行。动画似乎相互冲突,似乎我正在做与 Cocoa Touch 在从屏幕上关闭 modalView 时试图为我做的完全相同的事情。
      【解决方案3】:

      编辑:

      好的,我认为这里的问题是模态位,因为 iPhone 看起来确实不喜欢您将 2 个视图设置为模态,甚至不喜欢从一个模态视图到另一个模态视图的动画。

      它们一定是模态的吗?将它们添加到普通导航堆栈怎么样?

      您可以先将消息视图添加到堆栈中(非动画),以便在您弹回一个时它就在那里。

      试试这个:

      将视图添加到堆栈的顺序会影响它们在您关闭它们时的显示顺序。

      这部分将 composeController 添加到堆栈中,然后为顶部的选择器设置动画。使用此代码显示选择器控制器(即 而不是 模态对话框):

      [self.navigationController pushViewController:composeController animated:NO];
      [self.navigationController pushViewController:picker animated:YES];
      

      然后,当您完成选择器后,您可以将视图“弹出”回消息编写器:

      [self.navigationController popViewControllerAnimated:YES];
      

      您现在应该没有对代码中剩余的任何模式对话框的引用。我相信这应该比模态的效果要好得多,模态实际上是为了在一个视图之上显示一个视图,而不是从一个视图切换到另一个视图。

      希望有帮助!

      【讨论】:

      • 它不起作用,我唯一得到的是 composeController 有错误,根本没有 imagePicker。
      • 嗯好吧,我去试试看
      • 很遗憾,不支持,因为 UIImagePickerController 是 UINavigationController 的子类,Cocoa-Touch 不支持将导航控制器(Picker)推送到另一个导航控制器(主控制器)。
      【解决方案4】:

      实际上从两个 viewController 帮助中删除动画。

      [picker dismissModalViewControllerAnimated:NO];
      [self presentModalViewController:composeNavController animated:NO]; // If YES it crashes
      

      但如果得到我的意思,它就不是 iPhone 式的,即使是淡入淡出或者只是一些视觉效果都会让它看起来更好、更好。从技术上讲,它确实有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 2020-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-19
        相关资源
        最近更新 更多