gpt4 book ai didi

ios - 未触发自定义 segue 的展开

转载 作者:行者123 更新时间:2023-11-28 08:24:34 24 4
gpt4 key购买 nike

问题

我的问题是即使单击后退按钮也不会触发展开过程。

我的代码

我有一个类 1stViewController,它使用到 2ndViewController 的自定义转场。自定义转场如下:

override func perform() {
let sourceVC = self.source as! 1stViewController
let destinationVC = self.destination as! 2ndViewController
sourceVC.addChildViewController(destinationVC)
sourceVC.view.addSubview(destinationVC.view)
}

在我的 2ndViewController 中,我添加了一个按钮,该按钮触发返回到 1stViewController 的展开转场。 unwind segue 通过 2ndViewController 中 unwind segue 触发导出的标识符连接。因此,我创建了一个 IBAction,unwind segue 导出连接到该 IBAction:

@IBAction func unwindToFeed(segue: UIStoryboardSegue) {}

我已经将 unwind segue 的标识符设置为等于按钮的操作函数中使用的标识符

func handleActionBackButton(){
print("here")
self.performSegue(withIdentifier: "unwindId", sender: self)
}

单击按钮时打印“Here”,但似乎没有执行 performSegue。

我猜想我也需要一个自定义的 unwindSegue 类,所以我创建了 unwindSegueEventToFeed:

class unwindSegueEventToFeed: UIStoryboardSegue {

override func perform() {
let sourceVC = self.source as! 2ndViewController
let destinationVC = self.destination as! 1stViewController

let sourceView = sourceVC.view as UIView!
let destView = destinationVC.view as UIView!

let window = UIApplication.shared.keyWindow
window?.insertSubview(destView!, aboveSubview: sourceView!)
sourceVC.dismiss(animated: false, completion: nil)
}

}...在 2ndViewController 中调用:

override func segueForUnwinding(to toViewController: UIViewController, from fromViewController: UIViewController, identifier: String?) -> UIStoryboardSegue? {
return unwindSegueEventToFeed(identifier: identifier, source: fromViewController, destination: toViewController)
}

关于我必须做些什么来触发平仓过程的任何线索?

最佳答案

我让你的例子像这样工作。 ViewController 是第一个 View Controller ; ViewController2 是第二个 View Controller :

class ViewController: UIViewController {
@IBAction func unwindToFeed(_ segue: UIStoryboardSegue) {
let child = self.childViewControllers[0]
child.willMove(toParentViewController: nil)
child.view.removeFromSuperview()
child.removeFromParentViewController()
}
}

class MySegue: UIStoryboardSegue {
override func perform() {
let sourceVC = self.source as! ViewController
let destinationVC = self.destination as! ViewController2
sourceVC.addChildViewController(destinationVC)
sourceVC.view.addSubview(destinationVC.view)
destinationVC.view.frame = sourceVC.view.bounds
destinationVC.view.autoresizingMask = [.flexibleHeight, .flexibleWidth]
destinationVC.didMove(toParentViewController: sourceVC)
}
}

class ViewController2 : UIViewController {
}

请注意,unwindToFeed 位于(并且必须位于)第一个 View Controller 中。将它放在第二个 View Controller 中是没有意义的,因为第二个 View Controller 是展开的,而不是目的地

现在我想对这个问题和我的回答做一些评论:

  • 这是一个 iOS 10 示例。 segueForUnwinding永远在 iOS 10 中被调用;它在 iOS 8 之后被废弃,随后被弃用。

  • segueForUnwinding 的 iOS 9/10 等价物是 unwind(for:towardsViewController:)。我确实尝试实现它,但我发现它是在 ViewController2 中调用的,而不是在 ViewController 中调用的。我认为这是 iOS 10 中的错误,并已将其报告给 Apple。

关于ios - 未触发自定义 segue 的展开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40451213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com