在关闭作为模型视图本身的视图 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
显示它不是不再出现在屏幕上。
那么,你能做什么呢?
当前的self
在handleNewButton
方法的上下文中,理论上是由另一个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 时呈现视图(全屏)控制器的主要内容,如果未能解决你的问题,请参考以下文章