【发布时间】: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