如何从标签栏控制器执行 show segue?
How to perform show segue from tab bar controller?
我有一个带有 2 个视图的选项卡栏控制器,每个视图都嵌入在导航控制器中。我制作了一个从选项卡栏控制器到另一个具有标识符 "toNew" 的视图控制器的 segue 类节目。在其中一个选项卡栏视图中,我有一个按钮,它应该使用标识符 "toNew" 触发此 segue。
我试过 DataDelegate 但它在这里不起作用。
It's this part of storyboard
这是附加在标签栏中的视图控制器的视图控制器文件
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")
}
}
这是标签栏controller.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)
}
}
}
在你的 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")
}
顺便说一句,您不需要使用委托。您可以在其 viewController 的任何位置调用您的 taBarController。在这里,你可以调用它
不使用委托的 NavContToNew。
self.tabBarController?.performSegue(withIdentifier: "toNew", sender: self.tabBarController)
我有一个带有 2 个视图的选项卡栏控制器,每个视图都嵌入在导航控制器中。我制作了一个从选项卡栏控制器到另一个具有标识符 "toNew" 的视图控制器的 segue 类节目。在其中一个选项卡栏视图中,我有一个按钮,它应该使用标识符 "toNew" 触发此 segue。 我试过 DataDelegate 但它在这里不起作用。
It's this part of storyboard
这是附加在标签栏中的视图控制器的视图控制器文件
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")
}
}
这是标签栏controller.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)
}
}
}
在你的 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")
}
顺便说一句,您不需要使用委托。您可以在其 viewController 的任何位置调用您的 taBarController。在这里,你可以调用它 不使用委托的 NavContToNew。
self.tabBarController?.performSegue(withIdentifier: "toNew", sender: self.tabBarController)