Как выполнить show segue из контроллера панели вкладок? - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть контроллер панели вкладок с двумя прикрепленными видами, каждый из которых встроен в контроллер навигации.Я сделал добросердечное шоу от контроллера панели вкладок до другого контроллера представления с идентификатором "toNew".В одном из представлений панели вкладок у меня есть кнопка, которая должна вызвать этот переход с идентификатором «toNew».Я попробовал DataDelegate, но он здесь не работает.

Это часть раскадровки

Это файл контроллера представления для контроллера представления, прикрепленный к панели вкладок

import UIKit

protocol DataDelegate {
func sendData(data : String)
}

class NavContToNew: UIViewController , UITabBarDelegate {

var delegate : DataDelegate?
var data : String = "ToNew"

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBAction func dismiss(_ sender: Any) {
    //self.dismiss(animated: true, completion: nil)
    self.delegate?.sendData(data:self.data)
    print("Perform segue delegate")
}
}

А это файл контроллера tab.swift

import UIKit

class TabBarCont: UITabBarController , DataDelegate {


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func sendData(data: String) {
    if data == "ToNew" {
        print("Segue perform")
        self.performSegue(withIdentifier: "toNew", sender: self)
    }
}
}

1 Ответ

0 голосов
/ 22 сентября 2018

В вашем NavContToNew вы не назначили делегата.

@IBAction func dismiss(_ sender: Any) {
            self.delegate = self.tabBarController as! TabBarCont
    //self.dismiss(animated: true, completion: nil)
    self.delegate?.sendData(data:self.data)
    print("Perform segue delegate")
}

Кстати, вам не нужно использовать делегат.Вы можете вызвать свой taBarController в любом месте его viewControllers.Здесь вы можете вызвать его в NavContToNew без использования делегата.

self.tabBarController?.performSegue(withIdentifier: "toNew", sender: self.tabBarController)
...