Открытие TabbedBarController из TableViewController - PullRequest
0 голосов
/ 16 апреля 2020

Это мой tableViewController, где я вызываю tabbedView, однако я получаю исключение в этой строке let viewController = segue.destination as! EViewController исключение:

Could not cast value of type 'UITabBarController' (0x7fff897a2cd8) to 'Test.EViewController'

Что странно, потому что EViewController является UIViewController а не UITabBarController

EviewController является первым ViewController в TabbedViewController. Должен ли я вызывать родительский контроллер? И как бы я это сделал? Я хочу передать данные в tabbedViewController

extension ViewController: UITableViewDataSource, UITableViewDelegate {

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    self.selectedName = (self.tableView.cellForRow(at: indexPath)?.textLabel?.text)!
    performSegue(withIdentifier: “menu”, sender: self)
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.names.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

    cell.textLabel?.text = names[indexPath.row]

    return cell
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if(segue.identifier == “menu”) {
        let viewController = segue.destination as! EViewController
    }
}
}

1 Ответ

0 голосов
/ 16 апреля 2020

проблема возникает с этими кодами

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if(segue.identifier == “menu”) {
        let viewController = segue.destination as! EViewController
    }
}

segue.destination должно быть UITabBarController вместо EViewController, и вы используете as! для преобразования UITabBarController в EViewController принудительно и это будет ошибка.

в этом случае вы должны взглянуть на UINavigationController и UITabBarController, стек просмотра равен

|UITabBarController|
    viewControllers:
    |EViewController|
    ...

, поэтому вы должны использовать segue.destination.topViewController чтобы исправить эту проблему.

...