[英]How can I determine the calling view controller?
我做了一个有两个部分的抽屉。因此我实现了一个委托模式来访问我的容器内的嵌入式tableView 。
class Drawer: UIViewController, DrawerTableViewDelegate {
var drawerVC : DrawerTableView?
override func viewDidLoad() {
super.viewDidLoad()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "tableViewSegue" {
self.drawerVC = (segue.destination as! DrawerTableView
self.drawerVC!.delegate = self
}
}
在我的DrawerTableView class 是实现的委托,还有一些代码来访问tableView中的行:
class MenuTableViewController: UITableViewController {
var delegate : MenuTableViewControllerDelegate?
//tableview delegate
抽屉以相同的方式在两个场景中被调用:
@objc func didTapRowInDrawer(_ sender: UIBarButtonItem) {
guard let drawerVC = storyboard?.instantiateViewController(withIdentifier: "DrawerCtrl") as? Drawer else { return }
drawerVC.modalPresentationStyle = .overCurrentContext
drawerVC.transitioningDelegate = self
present(drawerVC, animated: true)
}
我可以确定抽屉的调用ViewController吗?
我想到了类似的东西
if segue.source is VC {
//do something
} else if segue.source is VC2 {
// do something else
}
在抽屉里::准备
从代码中可以看出,Drawer 是作为 Modal 呈现的。 呈现 Modal 的 viewController 存储在presentingViewController
变量中。 您可以在DrawerViewController
中使用以下代码来确定哪个ViewController
呈现了 Drawer。
if let presentingVC = self.presentingViewController {
if presentingVC.isKind(of: VC1.self) {
//do something
} else if presentingVC.isKind(of: VC2.self) {
// do something else
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.