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