Ios 从UITabBarController(Swift)打开(即转到)特定序列

Ios 从UITabBarController(Swift)打开(即转到)特定序列,ios,swift,swift2,Ios,Swift,Swift2,在Swift 2中,Xcode 7.1 如上图所示,TabBarController将是主视图。匿名用户可以进入主页选项卡,如果他们单击“我”(配置文件)选项卡,我希望应用程序将弹出新的登录segue(导航控制器)。用户需要先登录才能进入“我”选项卡 目前,我已覆盖TabBarController类中的TabbarControllerDelegate,如下所示(我使用Parse,因此user=PFUser.currentUser(),Parse将缓存用户): 我怎样才能从这里实现我的目标?还是有

在Swift 2中,Xcode 7.1

如上图所示,
TabBarController
将是主视图。匿名用户可以进入主页选项卡,如果他们单击“我”(配置文件)选项卡,我希望应用程序将弹出新的登录segue(导航控制器)。用户需要先登录才能进入“我”选项卡

目前,我已覆盖TabBarController类中的
TabbarControllerDelegate
,如下所示(我使用Parse,因此
user=PFUser.currentUser()
,Parse将缓存用户):

我怎样才能从这里实现我的目标?还是有更好的建议?顺便说一句,我不能将
performsguewithidentifier
用于
TabBarController
类,除非我在
ProfileViewController
类(UIViewController)中使用它来实现它。但如果我这样做了,应用程序将首先在“我”选项卡中显示视图,然后转到“登录”页面,这不是我想要的


非常感谢您提供的任何建议

我建议您让登录
UINavigationController
序列直接来自
UITabBarController
而不是“我”控制器。这是因为如果“我”控制器不在屏幕上,您无法通过“我”控制器以模式显示您的登录控制器

给序列一个标识符(例如,“我的标识符”):

  • 点击故事板编辑器中的segue并填写右侧边栏中的identifier字段
正确配置后,以下代码将执行登录segue(注意使用
tabBarController
,因为您应该从
UITabBarController
配置segue):

tabBarController.performSegueWithIdentifier("my-identifier", sender: self)

如果你想让用户在登录前不能找到我,你可以用一个静态bolean进行检查,这个静态bolean将在应用程序委托中初始化。 然后,如果bolean设置为false(默认值),则可以调用登录弹出窗口。 这里没有执行序列的必要,只需在序列图像板的视图上放置一个标识符(identity inspector=>序列图像板id),然后您就可以像这样调用序列图像板的这个特定视图:

let SB = UIStoryboard(name: "MyStoryboard", bundle: nil)
let controller = SB.instantiateViewControllerWithIdentifier("MyId")
self.presentViewController(controller, animated: true, completion: nil)

Segues仅用于相互链接的视图,我个人几乎从未使用过它们。

它有效&最重要的是你确实清楚地解释了问题所在。你是对的,我不能显示屏幕上没有的内容。这就是为什么我以前在NavController中尝试PerformsgueWithIdentifier,但Xcode告诉我这一点我链接到错误的父控制器。作为新手,我最好阅读更多关于VC文档的信息。非常感谢您的帮助:D@Neaped很高兴能提供帮助!别忘了奖励赏金(单击答案左侧的+50)如果这个答案对你有帮助,你就不会再寻求更多的信息了。这是一个很好的答案,故事板会比segue好得多,这是正确的,所以我给了你投票。但作为一个新手,我从来没有想过用这种方式来解决这个问题,圣诞老人的答案将100%适合我的问题(正如我所问的),所以我把赏金给了他。希望你们不要介意。你们两个都给了我很多iOS开发方面的优秀经验,非常感谢:D
let SB = UIStoryboard(name: "MyStoryboard", bundle: nil)
let controller = SB.instantiateViewControllerWithIdentifier("MyId")
self.presentViewController(controller, animated: true, completion: nil)