Ios 成功登录时打开选项卡栏控制器
我对swift和故事板非常陌生。我有一个初始视图集,它向用户提供登录或注册选项。登录web服务成功后,我将尝试打开一个选项卡栏。我正在进入网络服务的成功,因为我可以看到响应 在初始视图控制器中,我尝试加载选项卡栏的代码如下所示:Ios 成功登录时打开选项卡栏控制器,ios,swift,uitabbarcontroller,Ios,Swift,Uitabbarcontroller,我对swift和故事板非常陌生。我有一个初始视图集,它向用户提供登录或注册选项。登录web服务成功后,我将尝试打开一个选项卡栏。我正在进入网络服务的成功,因为我可以看到响应 在初始视图控制器中,我尝试加载选项卡栏的代码如下所示: func loadHomeScreen() { emailField.text = "" passwordField.text = "" self.presentViewController(UIStoryboar
func loadHomeScreen()
{
emailField.text = ""
passwordField.text = ""
self.presentViewController(UIStoryboard.tabbarController()!, animated: true, completion: nil)
}
在该文件的最底部,我有以下内容:
private extension UIStoryboard {
class func mainStoryboard() -> UIStoryboard { return UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) }
class func tabbarController() -> TabbarController? {
return mainStoryboard().instantiateViewControllerWithIdentifier("TabbarControllerID") as? TabbarController
}
}
在我的故事板中,我给了tabbarcontroller上面的id。当我运行应用程序(在iphone6模拟器上测试)时,我得到了错误“在展开可选值时发现为零”
,这是指向上面loadHome函数中的代码行(self.presentViewController(UIStoryboard.tabbarController(),动画:true,完成:nil))
如果您有任何帮助,我们将不胜感激。您可以像这样实例化故事板,代码在
loadHomeScreen()下如下所示:
您可能需要将bundle更改为代码中的“mainBundle”,但这应该是可行的
如果您的计划是扩展UIStoryboard
来实例化ViewControllers
,那么这可能不是最佳解决方案,但我认为这可能会更容易/更干净一些,具体取决于项目的设置方式。不幸的是,这不起作用,我不得不将私有扩展情节提要更改为:私有扩展UIStoryboard{class func MainstryBoard()->UIStoryboard{返回UIStoryboard(名称:“Main”,bundle:NSBundle.mainBundle())}类func tabbarController()->UITabBarController?{返回MainstryBoard().instanceeviewcontrollerwhiteIdentifier(“TabbarControllerID”)为?UITabBarController}}哦,我知道了,我以为你在将UITabBarController子类化为你自己的TabbarController类。请参考下面的答案-
emailField.text = ""
passwordField.text = ""
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("TabbarControllerID") as! TabbarController
self.presentViewController(vc, animated: true, completion: nil)