【问题标题】:UIViewController Consecutive Dismiss CallsUIViewController 连续关闭调用
【发布时间】:2016-04-30 13:12:06
【问题描述】:

我有三个视图控制器

  • ViewControllerA
  • ViewControllerB
  • ViewControllerC

这是我正在尝试解决的场景

  • ViewControllerA 将 ViewControllerB 推送到导航层次结构中
  • ViewControllerB 将 ViewControllerC 呈现为模态,关闭 委托

  • 按下 ViewControllerC 关闭按钮,发送关闭委托并关闭 ViewControllerC

  • ViewControllerB 收到关闭委托,并尝试关闭 本身因此显示 ViewControllerA

由于某种原因 ViewControllerB 没有被解雇。如果我按下 ViewControllerB 中的取消按钮,则可以将其关闭。

为什么不能连续解雇?

ViewControllerC

@IBAction func closeClick(sender: AnyObject) {
    self.closeDelegate?.didClose()
    self.dismissViewControllerAnimated(true, completion: nil)
}

视图控制器B

func didClose() {
        print("did close") // gets called
        self.dismissViewControllerAnimated(false, completion: nil) // no dismiss
        //self.navigationController?.popViewControllerAnimated(false)
}

@IBAction func cancelClick(sender: AnyObject) {
        self.dismissViewControllerAnimated(true, completion: nil) // works
}

【问题讨论】:

  • 你应该从 ViewControllerB 调用dismissViewController,而不是 ViewControllerC。根据您的描述,听起来您调用了 pushViewControllerAnimated 来呈现 ViewControllerB。如果是这样,您需要调用 popViewControllerAnimated 以返回 ViewControllerA。
  • 因为在您调用 didClose 委托时,视图控制器 C 尚未自行关闭。如果您正在使用情节提要,则定义一个展开 segue 以查看控制器 A 并从视图控制器 c 触发它,否则我建议您尝试调用 didClose 委托关闭或使用视图控制器 b在委托方法中关闭 C
  • @Paulw11 我最终按照建议从控制器 b 中关闭了视图 C。如果您将此作为答案,我可以将其标记为“已回答”。尽管过渡并不像您在视图 B 显示视图 A 之前看到的那样平滑。

标签: ios iphone swift uiviewcontroller


【解决方案1】:

您说您正在将视图控制器 B 推送到导航控制器上。关闭视图控制器 B 是不可能的,因为包含它的导航控制器是根视图控制器。

您需要将pop 返回导航控制器的根视图控制器,因此您在视图控制器 A 上的委托方法实现应该执行弹出而不是关闭。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多