我正在尝试创建一系列的页面,这些页面使用自定义段协同工作。在我让他们在一个特定的系列中执行之前,这些片段工作得很好。从VC1开始,我通过默认模式segue转到VC2(它在原始segue上弹出)。然后,从VC2转到VC3,使用自定义水平段(下面的代码)。最后,我从VC3返回到VC1,使用自定义的水平放卷段。问题是当我回到VC1时,VC2出现了。我检查了ViewDidLoad,当它出现时,它不会在VC2中执行,但是当它被触发时,我仍然可以与它交互。我对正在发生的事情的最佳猜测是VC2覆盖了VC1,所以当我回到VC1时,VC2显示在它上面。即使这是个问题,我也不知道怎么解决。代码如下:
水平段:

class HorizontalSegue: UIStoryboardSegue {

    override func perform() {
        let src = self.source as UIViewController
        let dst = self.destination as UIViewController

        src.view.superview?.insertSubview(dst.view, aboveSubview: src.view)
        dst.view.transform = CGAffineTransform(translationX: src.view.frame.size.width, y: 0)

        UIView.animate(withDuration: 0.2, delay: 0.0, options: [.curveEaseOut], animations: {
            dst.view.transform = CGAffineTransform(translationX: 0, y: 0)
        },
            completion: { finished in
                src.present(dst, animated: false, completion: nil)
        })
    }
}

展开水平段:
class UnwindHorizontalSegue: UIStoryboardSegue {

    override func perform() {
        let src = self.source as UIViewController
        let dst = self.destination as UIViewController

        src.view.superview?.insertSubview(dst.view, belowSubview: src.view)
        src.view.transform = CGAffineTransform(translationX: 0, y: 0)

        UIView.animate(withDuration: 0.2, delay: 0.0, options: [.curveEaseIn], animations: {
            src.view.transform = CGAffineTransform(translationX: src.view.frame.size.width, y: 0)
        },
            completion: { finished in
                src.dismiss(animated: false, completion: nil)
        })
    }
}

最佳答案

我注意到的第一件事是你说的ViewDidLoad不需要VC2。请查看是否正在调用ViewDidAppear(或将出现)。
ViewDidLoad仅在加载视图时调用(最初,在视图之前不存在时)。ViewDidAppear当视图进入用户屏幕时,应始终触发。
之后,在您的自定义dst中登录UIStoryBoardSegue。如果这是VC2的一个实例,那么您只是推错了视图控制器。
我也看到你在你的src.present中使用src.dismissUIStoryboardSegue。这意味着您实际上不是在推送视图,而是在活动视图控制器的“顶部”显示它们。试着重新思考这个逻辑,因为这很可能是问题所在。
我宁愿尝试推动视图控制器(通常,而不是“呈现”它们)并更改UIStoryboardSegue外观以伪造动画(如果这是您所追求的)。

关于swift - Segue转换到错误的页面Swift Xcode,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57632429/

10-12 03:07