在关闭作为模型视图本身的视图 1 时呈现视图(全屏)控制器

Posted

技术标签:

【中文标题】在关闭作为模型视图本身的视图 1 时呈现视图(全屏)控制器【英文标题】:Presentview(full screen) controller while dismissing View1 which is model view itself 【发布时间】:2014-01-15 11:52:23 【问题描述】:

我有一个 ipad 应用程序。

我正在尝试全屏打开视图 2(一种推送视图)。通常如何处理推送视图或UIModalPresentationFullScreen。但我的基本视图是视图 1 也是模态视图。

所以当视图 1 被关闭时,我试图打开视图 2……

- (void) handleNewButton :(int)id

               [self dismissViewControllerAnimated:YES
                                 completion:^
                                     NewViewController *View2 = [NewViewController alloc] init];
                                    View2.modalPresentationStyle = UIModalPresentationFullScreen;
                                     View2.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

                                     [self presentViewController: View2 animated:YES completion:nil];

                                 ];

 

但我的视图 2 没有打开。我知道我不能做推送视图。但是有什么方法可以实现吗?

【问题讨论】:

【参考方案1】:

当你这样做时,dismissViewControllerAnimated UIViewController(在这种情况下是自我)消失了,从某种意义上说,他不再出现在屏幕上,不管它是否已经发布,那就是另一回事了。您无法显示View2 的原因(非常糟糕的名称,它应该至少 ViewController2)是因为您试图从UIViewController 显示它不是不再出现在屏幕上。

那么,你能做什么呢?

当前的selfhandleNewButton 方法的上下文中,理论上是由另一个UIViewController 呈现的,这就是你想要呈现View2 的地方。

实施我所说的最快的方法可能是使用here 描述的通知。虽然我会用一个块来做,所以当self被创建时,我会传递一个dismissiCompletionBlock,当UIViewController被解雇时会调用它。

【讨论】:

是的,我给的名字只是为了提问(正如我提到的视图 2)我有我的应用程序的正确命名......。我什至尝试保存显示我的视图 1 的主视图,同时关闭 view1 .. 在主视图上推送视图......但我没有得到想要的结果...... [self dismissViewControllerAnimated:YES 完成:^ NewViewController *View2 = [NewViewController alloc] init]; View2.modalPresentationStyle = UIModalPresentationFullScreen; View2.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; [m_vwMainPage.navigationController pushViewController:partDataView 动画:YES]; ]; 我用上面的代码实现了这一点.. 将主视图保存到 View1 并在关闭 view1 时推送 view2 ......。有没有更好的方法来做到这一点......因为我必须保存我的主视图的副本......。 是的,我在回答中解释了这样做的两个方面。【参考方案2】:

如果您不使用情节提要,请尝试使用 nib 名称分配 NewViewController,

 [self dismissViewControllerAnimated:YES
                                 completion:^
        NewViewController *n=[[NewViewController alloc]initWithNibName:@"NewViewController" bundle:nil];

          View2.modalPresentationStyle = UIModalPresentationFullScreen;
          View2.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
          [self presentViewController: View2 animated:YES completion:nil];

                            ];

或者,如果您使用的是故事板,则使用标识符获取 NewViewController。

【讨论】:

以上是关于在关闭作为模型视图本身的视图 1 时呈现视图(全屏)控制器的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 在呈现另一个视图控制器时堆栈全屏视图控制器

在 swiftUI 中点击列表条目时呈现全屏视图

如何将视图控制器从视图控制器推送为全屏幕,呈现为半模式

在应用程序退出时关闭模式视图控制器

呈现和关闭模式视图控制器时如何保持选择集合视图单元格?

在 AVPlayerViewController 全屏视图上呈现 UIView