问题
我的问题是即使单击后退按钮也不会触发展开过程。
我的代码
我有一个类1stViewController,它使用自定义segue到2ndViewController。自定义segue如下:
override func perform() {
let sourceVC = self.source as! 1stViewController
let destinationVC = self.destination as! 2ndViewController
sourceVC.addChildViewController(destinationVC)
sourceVC.view.addSubview(destinationVC.view)
}
在我的2ndViewController中,我添加了一个按钮,触发一个展开的segue回到1stViewController。展开segue通过2ndViewController中的展开segue触发出口的标识符连接。因此,我创建了一个IBAction,它将unwind segue出口连接到:
@IBAction func unwindToFeed(segue: UIStoryboardSegue) {}
我已将unwind segue的标识符设置为等于按钮的action函数中使用的标识符
func handleActionBackButton(){
print("here")
self.performSegue(withIdentifier: "unwindId", sender: self)
}
单击按钮时会打印“此处”,但似乎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)
}
关于触发放卷过程我必须做些什么的任何线索?
答案 0 :(得分:0)
我让你的榜样像这样工作。 ViewController是第一个视图控制器; ViewController2是第二个视图控制器:
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
是<并且必须位于第一个视图控制器中。将它放在第二个视图控制器中是没有意义的,因为第二个视图控制器是展开的源,而不是目的地。
现在我想就问题和答案发表一些意见:
这是一个iOS 10示例。在iOS 10中永远不会永远调用segueForUnwinding
;它在iOS 8之后被放弃,随后被弃用。
相当于segueForUnwinding
的iOS 9/10是unwind(for:towardsViewController:)
。我确实试过实现它,但我发现它是在ViewController2中调用的,而不是在ViewController中调用的。我认为这是iOS 10中的一个错误,并且正在向Apple报告。