关闭一次后如何呈现相同的modalView

Posted

技术标签:

【中文标题】关闭一次后如何呈现相同的modalView【英文标题】:How to present the same modalView after dismissing it once 【发布时间】:2011-11-15 08:58:44 【问题描述】:

我在第一次呈现模态视图控制器后尝试呈现它时遇到了一些问题,所以我只是开始了一个小测试方法,它以模态方式呈现、关闭和再次呈现同一个控制器。

// This is just test Code.
MYViewController *vc = [[MYViewController alloc] init];
[self presentModalViewController:vc animated:YES];
[self dismissModalViewControllerAnimated:YES];
[self  presentModalViewController:vc animated:YES];

我得到错误:

2011-11-15 09:50:42.678 Proyecto3[1260:11603] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present modally an active controller <RootViewController: 0x6d9d090>.'

文档在这里没有添加任何线索。

【问题讨论】:

【参考方案1】:

@David,将MYViewController 设为实例变量,并像这样初始化它:

if (myInstance==nil)
     //create instance of MYViewController
     //myInstance.delegate=self
//present modal VC

MYViewController 中创建一个协议以协调解除MYViewController 可能位于donecancel 按钮上。在按钮操作中调用类似

    done 
    
       if([delegate respondsToSelector:@selector(willDismissModalView)])
       
           [delegate willDismissModalView];
       
   

并在您的 VC 的 willDismissModalView 方法中关闭 MYViewController。这样你可以做 'n' 次。

【讨论】:

这就是我在我的应用程序中的做法(这只是测试代码)。查看我未回复的帖子:***.com/questions/8076211/…【参考方案2】:

在您的代码中 [self dismissModalViewControllerAnimated:YES]; 不会对 modalViewController 执行任何操作,因为这里的“self”是您尝试呈现 modalViewController“vc”的 viewController。再次,您正在呈现已经呈现的 modalViewController。这将导致终止。

您可以在该 viewController 中关闭 modalViewController vc,此处为 vc。

【讨论】:

但这与文档所说的相反:“dismissModalViewControllerAnimated:关闭接收者呈现的模态视图控制器。”。同样在 View Controller Programming Guide 中,模态视图控制器以这种方式从父控制器中解散。【参考方案3】:

你不能在动画时展示/关闭视图控制器,我认为这可行

MYViewController *vc = [[MYViewController alloc] init];
[self presentModalViewController:vc animated:NO];
[self dismissModalViewControllerAnimated:NO];
[self  presentModalViewController:vc animated:YES];

但我真的看不出有任何这样做的理由,为什么要关闭并重新呈现已经呈现的模态视图控制器?

【讨论】:

这是一个测试代码,用于查看我的应用程序有什么问题。我试图在关闭它后第二次呈现 modalViewController 并且它不再显示。查看我未回复的帖子:***.com/questions/8076211/…

以上是关于关闭一次后如何呈现相同的modalView的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 如果应用程序首次启动 - 呈现 ModalView

从 ChildViewController 呈现 ModalView

如何让平面列表只呈现一次?

SwiftUI 工作表在第一次呈现时被关闭

目的地列表变空一次后无法移动项目,我该如何解决?

UIViewController 在应用程序启动时呈现一次[关闭]