Ios 无法将屏幕从我的obj c移动到另一个有主页选项卡栏应用程序的vc

Ios 无法将屏幕从我的obj c移动到另一个有主页选项卡栏应用程序的vc,ios,swift,Ios,Swift,我有一门目标C课。Cocoa类与Objective-C类之间的接口管理器。我正在将值传递给Swift类,一旦我在Cocoa类中使用submit按钮结束会话,我就会将值传递给Swift类。然后从我的接口类中,我使用通知中心转到另一个VC。但我的应用程序有一个选项卡栏。所以每次我需要回家,然后就去sessionvc。我不想展示我的家庭风投。我直接想要显示我的会话VC 下面是我的代码,我先到VC家,然后再去sessionvc: 更新代码: @objc func onOver(notificati

我有一门目标C课。Cocoa类与Objective-C类之间的接口管理器。我正在将值传递给Swift类,一旦我在Cocoa类中使用submit按钮结束会话,我就会将值传递给Swift类。然后从我的接口类中,我使用通知中心转到另一个VC。但我的应用程序有一个选项卡栏。所以每次我需要回家,然后就去sessionvc。我不想展示我的家庭风投。我直接想要显示我的会话VC

下面是我的代码,我先到VC家,然后再去sessionvc:

更新代码:

   @objc func onOver(notification: NSNotification)
    {
   if let score = notification.object as? NSDictionary
        {
            DispatchQueue.background(delay: 0.1000, completion:{
             DispatchQueue.main.async {
                    let storyBoard = UIStoryboard.init(name: "Trai", bundle: nil);
                    if let sessionvc = storyBoard.instantiateViewController(withIdentifier:
                        "sessionvc") as? sessionvc{

                        if let navController = TopView.topViewController()?.navigationController as? UINavigationController{
                            TopView.topViewController()?.navigationController?.pushViewController(sessionvc, animated: true)
                        }else{
                            TopView.topViewController()?.present(sessionvc, animated: true)

                        }
                }
            }
        })
        }
    }

您的案例实际上包含三个东西,即TabbrController,可能是导航控制器,当然还有UIViewController,因此,当发布来自非UIViewController类的通知时,您将永远不知道您在哪个控制器上,因此使用0索引访问nav控制器将无法解决您的问题。请尝试以下内容来确定您的顶级控制器

//Put this in separate file

import UIKit
class Utility:NSObject{
    class func topViewController(base: UIViewController? = UIApplication.sharedApplication.keyWindow?.rootViewController) -> UIViewController? {
        if let nav = base as? UINavigationController {
            return topViewController(base: nav.visibleViewController)
        }
        if let tab = base as? UITabBarController {
            if let selected = tab.selectedViewController {
                return topViewController(base: selected)
            }
        }
        if let presented = base?.presentedViewController {
            return topViewController(base: presented)
        }
        return base
    }

}
而不是这样做

if let controller = self.window?.rootViewController as? TBTabBarController{
                    if let navController: UINavigationController  = controller.viewControllers?[0] as? UINavigationController
                    {
这样做

let storyBoard = UIStoryboard.init(name: "TBTrain", bundle: nil);
                    if let sessionController = storyBoard.instantiateViewController(withIdentifier:
                        "Ssessionvc") as? Ssessionvc{

if let navController = Utility.topViewController()?.navigationController as? UINavigationController{  Utility.topViewController()?.navigationController?.pushViewController(sessionController, animated: true)
                        }
    }
    else{
    Utility.topViewController()?.present(sessionController, animated: true)

}

**注:**如果您在tabbar中没有任何导航控制器,那么您实际上需要显示控制器而不是推送

请编辑您的问题并更好地解释您的问题,最好使用屏幕截图/流程图简单,我想在不返回主屏幕的情况下使用另一个vc。如果我从我的
onSessionOver
方法中删除我的行
elf.showHome()
,那么它根本不会出现在我的
sessionvc屏幕上
你的sessionvc和homevc在tabbar视图控制器中?你调试过你的控件到达这一行了吗让storyBoard=UIStoryboard.init(名称:“TBTrain”,bundle:nil);在onSessionOver选择器中?@kerry my homevc具有选项卡栏。但是我的会话VC没有标签栏评论不是用于扩展讨论;这段对话已经结束,但我仍然无法解决我的问题。你能帮我一下吗?@Abulhassan很抱歉重播太晚了,我第一次更新了我的代码。第二次,我得到了白色的空白屏幕,我添加了断点,它来自这一行
TopView.topViewController()?.present(sessionvc,动画:true)
并且从第二次开始得到了白色屏幕。现在这是一个逻辑问题,你必须自己找到它。@Abulhassan我无法找到它,当它第一次添加时,作为目前vc的顶层,同样的流程也只存在。我是否需要从顶部移除任何vc?