【问题标题】:Tabbar not showing when i open from side menu当我从侧面菜单打开时,标签栏不显示
【发布时间】:2019-08-26 06:31:48
【问题描述】:

我正在使用此代码

 let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
            let controller = storyboard.instantiateViewController(withIdentifier: "PrintMainViewController")
            self.navigationController!.pushViewController(controller, animated: true)

还添加了:

self.tabBarController?.tabBar.isHidden = false

【问题讨论】:

  • 详细解释,以便我们为您提供帮助。
  • 想要在用户从侧边菜单点击时显示 tababar 但它没有显示。但是当它来自 homecontroller 时它会显示。
  • 你确定PrintMainViewController 是标签栏控制器的子类吗? self.tabBarController?.tabBar.isHidden = false 行很可能在您的代码中绝对不会做任何事情,因为 self.tabBarControllernil 如果这是与第一个 sn-p 相同的视图控制器。如果有任何尝试(controller as! UITabBarController).tabBar.isHidden = false。如果它崩溃,那么这个控制器不是标签栏控制器的子类。
  • @Dhara 如果要全部显示标签栏,则需要在单击 pushViewController 的侧边菜单实例时更改对 tabBarController 的选择.
  • No PrintMainViewController 不是子类。它来自侧面菜单

标签: ios swift


【解决方案1】:

如果我正确理解您的层次结构,您就有一个标签栏控制器,其中包含导航控制器。所以基本上任何标签都可以推送额外的视图控制器,标签栏仍然可见。

现在您想在标签栏中当前选定的视图控制器上推送一些新控制器,并且您想从应用程序的另一部分执行此操作,即另一个与标签栏无关的视图控制器。

最快的方法是公开标签栏视图控制器的静态实例。这仅在您的应用程序中始终只有 1 个标签栏控制器(可能是 99% 的应用程序)时才有效。

首先将当前实例添加到您的标签栏视图控制器:

class MyTabBarViewController: UITabBarController {

    static private(set) var currentInstance: MyTabBarViewController?

    override func viewDidLoad() {
        super.viewDidLoad()
        MyTabBarViewController.currentInstance = self
    }

}

因此,当视图加载时,会分配一个静态值,现在可以通过MyTabBarViewController.currentInstance 在项目中的任何位置访问。

剩下的就是访问当前选择的视图控制器并推送一个新的视图控制器。应该这样做:

let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "PrintMainViewController")
(MyTabBarViewController.currentInstance?.selectedViewController as? UINavigationController)?.pushViewController(controller, animated: true)

【讨论】:

  • 谢谢@Matic Oblak
  • 它对我不起作用...这是我在侧边菜单中的代码。 TabbarController *tabClassObj = [TabbarController sharedInstance]; [tabClassObj.selectedViewController pushViewController:vcIdentifier Animation:YES];
  • @Sivagami 是崩溃还是什么也没发生?尝试向“不工作”提供尽可能多的信息。在您发布的第二行代码中放置一个断点。然后在 Xcode 的控制台中(通常位于右下角)输入“po tabClassObj”和“po tabClassObj.selectedViewController”,让我知道控制台为两者打印的内容。
  • 它没有推送到下一个视图控制器。我检查了日志,tabClassObj.selectedViewController 有值(导航控制器)请检查这个链接,这就是我想要实现的。 stackoverflow.com/questions/60278538/…
  • 如果tabClassObj.selectedViewController 确实是一个导航控制器,那么这是一个奇怪的问题。您的调用应该是正确的,并且这部分代码应该可以正常工作。其他候选人将是(不限于)您在非主线程上调用此代码,该导航控制器当时不在顶部(其他一些控制器显示在它上面或显示其他选项卡栏),控制器立即弹出,controller 为空...
【解决方案2】:

你必须推入 TabBarController

self.tabBarController?.pushViewController(controller, animated: true)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多