两个模态 VC 同时显示 ios



出于某种原因,当我尝试通过模态 segue 打开视图控制器时,它会打开两个相同类型的控制器。为什么会这样?

Warning: Attempt to present <ModalViewController: 0x7fa062c5edd0>  
on <HomeViewController: 0x7fa062e16e40> which is already presenting 
<ModalViewController: 0x7fa062fb9780>

这会导致问题,因为我尝试使用委托,但我的主视图控制器从未获得正确的委托。

当我单击触发showModalView的按钮时出现问题

首视图控制器

- (IBAction)showModalView:(UIButton *)sender {
    ModalViewController *modalView = [[ModalViewController alloc] init];
    [self presentViewController:modalView animated:YES completion:nil];
}

在这里和这里以及其他十几个解决方案中尝试了这个解决方案,但似乎都不适合我。

为什么会这样?

您遇到的问题是,因为您已将 segue 连接到按钮,并且还在代码中呈现控制器;您应该执行其中之一。删除 segue 时,会出现黑屏,因为您正在使用 alloc init 来创建控制器。如果在情节提要中创建了控制器,则应改用实例化视图控制器与标识符:。

但是,更简单的方法是将 segue 连接到按钮,并删除按钮操作方法中的代码。该按钮不需要操作方法,如果将其直接挂钩到Segue。所有这些都在Apple的文档"iOS视图控制器编程指南"中进行了介绍。你应该阅读它。

最新更新