如何在标签栏视图控制器中显示后退按钮?

Posted

技术标签:

【中文标题】如何在标签栏视图控制器中显示后退按钮?【英文标题】:How to show back button in a tab bar viewcontroller? 【发布时间】:2017-08-04 09:38:35 【问题描述】:

我有一个导航控制器,其根目录上有一个主视图控制器。然后我推一个标签栏视图控制器。后退按钮消失。如何通过后退按钮从标签栏视图控制器返回到主视图控制器?我怎样才能让它再次可见?

我试过了:

let navItem = self.navigationController?.navigationItem
let navItem2 = self.navigationItem;
leftBarButton = UIBarButtonItem()
leftBarButton.image = UIImage(named: "arrows-back-icon-24.png")
leftBarButton.action = #selector(self.popViewController);
leftBarButton.target = self
navItem?.leftBarButtonItem = leftBarButton
navItem2.leftBarButtonItem = leftBarButton;

我也试过了:

let navItem = self.navigationController?.navigationItem
let navItem2 = self.navigationItem;
navItem?.leftBarButtonItem = nil;
navItem2.leftBarButtonItem = nil;

一切都不起作用。请帮忙。谢谢。

【问题讨论】:

你需要将tabBarViewController设为rootViewController 你的流程是这样的吗? UINavigationController -> UIViewController (你的家庭 vc) -> UITabBarController. 尝试更改为 leftBarButton.action = #selector(self.navigationController?.popViewController)。但首先您需要确认工作流程 UINavigationController -> UIViewController(Home) -> UITabBarController @JD。是的,这就是我的流程。 @wskcoder 流程​​是这样的,但问题是按钮根本没有显示。不是无效的操作。 【参考方案1】:

试试这个:将 UITabBarController 类文件分配给标签栏控制器,就像视图控制器一样。

import UIKit
//this is TabBarController.swift file
class TabBarController: UITabBarController 
    override func viewDidLoad() 
        super.viewDidLoad()

    

然后像这样从 HomeVC 推送它(这里,我使用 UIButton 进行推送):

@IBAction func btnPush(_ sender: UIButton) 
    let vc = self.storyboard?.instantiateViewController(withIdentifier: "TabBarController") as! TabBarController
    self.navigationController?.pushViewController(vc, animated: true)

【讨论】:

【参考方案2】:

我遇到了同样的问题,但就我而言,这是由于 viewWillAppear 方法造成的。尝试将以下内容添加到嵌入在相应 UITabBarController 中的每个 UIViewController:

override func viewWillAppear(_ animated: Bool) 
        super.viewWillAppear(true)
        self.navigationController?.setNavigationBarHidden(false, animated: true)
    

希望这对你有用。

【讨论】:

【参考方案3】:
let btn1 = UIButton(type: .custom)
btn1.setImage(UIImage(named: "image"), for: .normal)
btn1.frame = CGRect(x: 0, y: 0, width: 20, height: 20)
btn1.addTarget(self, action: #selector(methodname), for: .touchUpInside)
let item1 = UIBarButtonItem(customView: btn1)

let btn2 = UIButton(type: .custom)
btn2.setImage(UIImage(named: "image"), for: .normal)
btn2.frame = CGRect(x: 0, y: 0, width: 20, height: 20)
btn2.addTarget(self, action: #selector(methodName), for: .touchUpInside)
let item2 = UIBarButtonItem(customView: btn2)  

self.navigationItem.setLeftBarButtonItems([item1,item2], animated: true)

试试这个

【讨论】:

问题不在于按钮的内容。问题是,无论我为标签栏上的左栏按钮项设置什么,它都是空的。

以上是关于如何在标签栏视图控制器中显示后退按钮?的主要内容,如果未能解决你的问题,请参考以下文章

如何在标签栏控制器视图上创建后退按钮?

iOS 7 - 后退按钮后标签栏消失

从标签栏控制器打开带有后退按钮的单独 ViewController

在导航控制器中添加标签栏控制器时隐藏后退按钮

如何停止加载标签栏项目选择的视图?

从导航栏视图控制器导航到标签栏视图控制器