简体   繁体   English

如何确定调用视图 controller?

[英]How can I determine the calling view controller?

I made a drawer with two sections.. therefore I implemented a delegate pattern to access a embedded tableView inside of my container .我做了一个有两个部分的抽屉。因此我实现了一个委托模式来访问我的容器内的嵌入式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
        }

    }

In my DrawerTableView class is the delegate implemented and also some code to access the rows in the tableView :在我的DrawerTableView class 是实现的委托,还有一些代码来访问tableView中的行:

class MenuTableViewController: UITableViewController {

    var delegate : MenuTableViewControllerDelegate?
//tableview delegate

The drawer gets called in two scenes in the same way:抽屉以相同的方式在两个场景中被调用:

@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)
    }

Can I determine the calling ViewController of my drawer ?我可以确定抽屉的调用ViewController吗?

I thought of something like我想到了类似的东西

if segue.source is VC {
   //do something
} else if segue.source is VC2 {
  // do something else
}

in Drawer::prepare抽屉里::准备

From the code, it looks like the Drawer was presented as a Modal.从代码中可以看出,Drawer 是作为 Modal 呈现的。 The viewController which presented a Modal is stored in presentingViewController variable.呈现 Modal 的 viewController 存储在presentingViewController变量中。 You can use the below code in the DrawerViewController to determine which ViewController had presented the Drawer.您可以在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