如何从标签栏控制器执行 show segue?

Posted

技术标签:

【中文标题】如何从标签栏控制器执行 show segue?【英文标题】:How to perform show segue from tab bar controller? 【发布时间】:2018-09-21 21:53:27 【问题描述】:

我有一个附有 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)
    


【问题讨论】:

按钮在紫色视图控制器中吗?如果是这样,请将您的 segue 连接到该 VC 而不是标签栏控制器。您也可以连接按钮直接将 segue 连接到情节提要中的下一个 VC,而无需任何代码。 感谢您的回答。我试过了,但我想退出导航控制器(没有导航栏)并以推送模式呈现视图控制器。 【参考方案1】:

在您的 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。在这里,你可以调用它 不使用委托的 NavContToNew。

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

【讨论】:

非常感谢。完美运行。

以上是关于如何从标签栏控制器执行 show segue?的主要内容,如果未能解决你的问题,请参考以下文章

在不显示标签栏的情况下执行对另一个导航控制器的 segue

如果通过 segue 从另一个 Tab 进入,如何从控制器中删除 TabBar?

如何在 Xcode 中展开 segue

放松Segue隐藏标签栏

标签栏控制器/ Segue问题

标签栏控制器和segue导航