在演示或解散正在进行时试图从视图控制器(UIModalViewController)中解雇
我刚开始研究ios。 我创建了一个Modalviewcontroller (VC1)
并提交了另一个modalViewcontroller (VC2)
。 VC2上有一个按钮(dismiss)
,它将不得不关闭两个视图控制器。在演示或解散正在进行时试图从视图控制器(UIModalViewController)中解雇
我知道的方法是拨打电话: -
[self dismissViewControllerAnimated:YES completion:nil];
在VC2
然后调用相同的VC1
所以我创建了一个代表,它告诉我,如果被点击VC2解雇。 所以当解雇点: -
我打电话
[self dismissViewControllerAnimated:YES completion:nil];
在VC2 那么委托方法带我到VC1 ,我再打电话
[self dismissViewControllerAnimated:YES completion:nil];
这种方法是完美的工作,直到我在ios9 中使用应用程序时,我转移到ios7我开始接受警告,VC1没有被解雇。
请让我知道为什么会发生这种情况。
因此,在评论中告诉我的那部分工作。
[self.presentedViewController dismissViewControllerAnimated:YES completion:^{
[self dismissViewControllerAnimated:YES completion:nil];
}];
所以,错误告诉你到底发生了什么。你试图解雇VC1,而你的VC2解雇。通过将dismissViewControllerAnimated
到委托方法并不能保证VC1将之前解雇,取而代之的是,你应该在首先解雇打电话给你[self dismissViewControllerAnimated:YES completion:nil];
在完成块,所以你的代码看起来像:
[self dismissViewControllerAnimated:YES
completion:^{
[self dismissViewControllerAnimated:YES completion:nil];
}];
不应该是self.presentedviewcontroller在第一次解雇。 –
你想看多少动画?只能看到一个的方法是在呈现VC1的视图控制器(您希望在解散之后可见的视图控制器)上调用'self dismiss ...'。 – danh
对于斯威夫特人:
在我的情况,我可以通过改变时间一点点解决这个问题(发送方是当前的ViewController):
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute:
{
sender.performSegue(withIdentifier: "showNextVC", sender: nil)
})
但是: 这是一个不那么好的workaroun d,只是模糊了背后的真正原因,但至少它表明,那一刻确实发生了一些事情。在我的情况下,我想在发送异步请求之后立即执行segue。问题是,对于我已经显示的每个异步请求(后来被解雇),一个对话框告诉用户正在进行一些操作。
为了改进解决方法并产生更好的解决方案,我确保在拒绝进度警报的回调中执行了segue。
希望这样的背景信息可能会帮助别人找出使用委托的原因:)
- close方法调用传递给VC 1.在调用它自身dismissModal并在完成参数,也 – Shubhank
根据嗨解雇VC1你自己。presentsViewController dismissViewControllerAnimated:YES完成:^ {self dismissViewControllerAnimated:YES completion:nil]; }];应该工作 –
是的,它应该。 – Shubhank