Как я могу определить вызывающий контроллер представления? - PullRequest
0 голосов
/ 28 мая 2020

Я сделал ящик с двумя секциями ... поэтому я реализовал шаблон делегата для доступа к встроенному 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 реализован делегат , а также некоторый код для доступа к строкам в 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
}

в Ящик :: подготовить

1 Ответ

1 голос
/ 28 мая 2020

Судя по коду, ящик был представлен как модальный. ViewController, который представил Modal, хранится в переменной presentingViewController. Вы можете использовать приведенный ниже код в DrawerViewController, чтобы определить, какой ViewController представил ящик.

if let presentingVC = self.presentingViewController {
    if presentingVC.isKind(of: VC1.self) {
          //do something
    } else if presentingVC.isKind(of: VC2.self) {
         // do something else
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...