【问题标题】:Present UIAlertViewController from ChildViewController从 ChildViewController 呈现 UIAlertViewController
【发布时间】:2020-01-21 03:33:22
【问题描述】:

为了减少主视图控制器中的代码,我将大多数功能重构为两个子视图控制器。

在其中一个子视图控制器中,用户可以点击触发 ActionSheet 的按钮。我第一次尝试完成这个动作是

  1. 两个子视图控制器连接到情节提要中的父视图控制器
  2. 在子视图控制器 1 中创建委托属性。
  3. 在父视图控制器的 prepareForSegue 中,检查 segue.identifier 是否与子视图控制器匹配,然后将父视图控制器分配为子视图控制器的委托
  4. 使父视图控制器符合协议,该协议具有接受视图控制器作为参数的方法
  5. 当用户点击子视图控制器 1 中的按钮时,将调用委托函数,该函数将子视图控制器 1 传递给委托函数并在父视图控制器中引发操作表
  6. 一旦用户做出动作,子视图控制器的属性就会更新

当我尝试运行时,出现以下错误:Warning: Attempt to present <UIAlertController: 0x7f9bb6029200> on <BudgetSmart.TransactionListViewController: 0x7f9bb5d298b0> while a presentation is in progress!

我尝试 1. 关闭视图控制器,2. 从子视图控制器调用操作表,但错误仍然存​​在。演示中的视图控制器是指子视图控制器吗?如果是这样,解决这个问题的方法应该是什么?谢谢!

【问题讨论】:

  • 我以前见过这个错误,虽然它很少出现。你能提供一些你是如何做到这一点的代码吗?
  • 在属性检查器中显示警报控制器的特定视图控制器上打开情节提要,将显示样式更改为全屏,这是快速修复,我将在一段时间内通过适当的实施添加答案。
  • 我在设置中添加了更多详细信息。使视图控制器呈现样式全屏导致相同的错误

标签: ios swift uiviewcontroller parent-child


【解决方案1】:

您的子视图控制器是如何显示的?它是由父通过调用presentViewController呈现的吗?如果是这样,那么当您通过父母展示操作表时,您将看到该错误消息,因为父母已经展示了孩子。您需要全屏显示子视图控制器并显示子视图的操作表。

【讨论】:

  • 两个子视图控制器被添加到故事板上的父视图控制器中。我有 2 个子视图控制器,将两者都更改为全屏不起作用。我的假设也是问题是由呈现的子视图控制器引起的。然而,打电话解雇并没有帮助。我将尝试覆盖父视图控制器。也感谢任何建议
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 2014-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多