繁体   English   中英

如何确定调用视图 controller?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM