在传递数据时向后滑动以关闭子 VC

Posted

技术标签:

【中文标题】在传递数据时向后滑动以关闭子 VC【英文标题】:Swiping back to dismiss a child VC while passing data 【发布时间】:2018-10-08 22:11:51 【问题描述】:

我有一个包含 1 个父 VC 和 1 个子 VC 的导航控制器。数据在两者之间传递。在父 VC 上,我通过 prepareForSegue 将数据传递给子 VC。在子 VC 上返回到父 VC,我通过自定义后退按钮 unwind segue 传递数据。

来回传递数据效果很好。但是,我希望 Child VC 能够向右滑动以关闭,同时仍传递与 unwind segue 中相同的信息。

有没有办法通过滑动将数据传回父级,同时能够按下后退按钮展开?我使用的唯一手势方法是gestureRecognizerShouldBegin,它允许子 VC 向右滑动。

extension ChildVC: UIGestureRecognizerDelegate 
    func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool 
        return true
    

作为参考,这是我的放松:

@IBAction func unwindfromChild(_ sender: UIStoryboardSegue) 
    if let CVC = sender.source as? ChildVC 
        print("Unwind")
        dataReceived() // do stuff with the received data
    

【问题讨论】:

为什么不创建自定义展开转场?? @Sh_Khan 并在哪里调用自定义展开segue?我只需要通过滑动将数据传递回父 VC 以关闭子 VC 【参考方案1】:

您可以简单地将swipeGestureRecognizer 附加到您的视图,在Interface Builder 中命名展开segue,并在目标函数中命名trigger the unwind segue。

【讨论】:

这不起作用。添加 UIScreenEdgePanGestureRecognizer 可防止 ChildVC 向右滑动。【参考方案2】:

我用稍微不同的方法解决了这个问题。我完全删除了 unwind segue。通过委托传递数据。委托方法在navigationController:willShow中调用。

【讨论】:

以上是关于在传递数据时向后滑动以关闭子 VC的主要内容,如果未能解决你的问题,请参考以下文章

ios15在隐藏导航栏时向后半滑动会留下顶部空白空间 - SwiftUI

在传递 Cell 数据时向 CollectionViewCell 添加点击事件

向前传递后如何将数据向后传递给视图控制器?

将数据从 ViewController 传递回根 ViewController?

向下滑动以关闭另一个视图控制器时,有没有办法将数据传回视图控制器?

将数据从父 ViewController 传递到子 VC,无需故事板 - Swift 5