本人有若干成套学习视频, 可试看! 可试看! 可试看, 重要的事情说三遍 包含Java
, 数据结构与算法
, iOS
, 安卓
, python
, flutter
等等, 如有需要, 联系微信tsaievan
.
项目中经常碰到这种场景, 那就是A控制器跳转到B控制器, 然后B控制器返回到A控制器的时候, 要带B控制器的信息回来刷新A控制器. 看似很简单的一个需求, 我们需要用到代理, 或者通知来做, 实际上, 我们还可以用unwind segue来完成这个需求.
image.pngclass AViewController: UIViewController {
@IBAction func handleUnwindSegue(unwindSegue: UIStoryboardSegue) {
let svc = unwindSegue.source as! BViewController
view.backgroundColor = svc.view.backgroundColor
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
segue.destination.modalPresentationStyle = .fullScreen
}
}
在即将返回的控制器, 即A控制器中写需要处理业务逻辑的代码的方法:
@IBAction func handleUnwindSegue(unwindSegue: UIStoryboardSegue)
将back按钮拖线到B控制器的Exit, 那么点击back按钮, 就会返回A控制器, 并调用上述的方法:
@IBAction func handleUnwindSegue(unwindSegue: UIStoryboardSegue)
,通过segue
的source
属性, 可以拿到B控制器, 然后将B控制器的数据拿出来赋值给A控制器了, 这样就完成了控制器的逆向传值
这样直接将按钮B拖线到Exit的, 是会直接触发的, 如果我们要条件性触发的话怎么做呢?
image.png如上图所示, 选中vc, 按住control键, 拖到Exit, 然后选中Manual Segue
下面的方法.
然后选中这个unwind segue
.
标明unwind segue
的identifier
然后, 要使用这个segue
的时候, 直接调用
performSegue(withIdentifier:sender:)
就可以了, 这就是条件性调用了.
比如上述这个例子里, back按钮直接拖线到控制器, 而不是Exit. 然后在拖线的方法里调用performSegue(withIdentifier:sender:)
如下:
@IBAction func back(_ sender: UIButton) {
performSegue(withIdentifier: "segueID", sender: sender)
}
网友评论