用Swift完成不同View Controller之间的切换

之前用objective-c开发时,页面之间的切换很容易。其实用swift没有很大的变化,如果你是用storyboard完成的界面,基本上是同样的方式,只不过在代码部分写成swift风格的就行了。

今天在实验开发一个简单的小程序时,却遇到了一些bug,后来还是求助stackoverflow上的大神解决了问题,在此做下记录。

我的程序结构是这样的,在一个页面A中有个按钮,然后点击按钮以后,切换到另一个页面B。A和B都在同一个storyboard中。

这里先说下通用的方法:

  • 手动用代码建好的view controller,即不是在storyboard中建立的:
var vc = ViewController()
self.presentViewController(vc, animated: true, completion: nil)
return

  • 在storyboard中建立的可以用下面的代码:
let sb = UIStoryboard(name:"Main", bundle: nil)
let vc = sb.instantiateViewControllerWithIdentifier("tabBarController") as ViewController
self.presentViewController(vc, animated: true, completion: nil)

这里的tabBarController 是你在storyboard中对相应的viewcontroller打开其identifier inspector,然后对其storyboard ID起的名字。

所以我的程序就是,在A的类中,定义下面的button action:

@IBAction func login(sender: UIButton) {
        let sb = UIStoryboard(name: "Main", bundle: nil)
        let vc = sb.instantiateViewControllerWithIdentifier("tabBarController") as UITabBarController
        self.presentViewController(vc, animated: true, completion: nil)
    }

注意我这里as后并没有写成ViewController,bug就出现在这里。当我最初写的是viewController时,总会出bug,提示这样:

我Google了关于dynamic Cast Class Unconditional也没有找到太多有用的信息,没有办法只有求助stackoverflow的大神了,很快就有人回复:

原来是因为我从storyboard读到的被命名为tabBarController的控件不能被强制转换(as)成viewcontroller,因为它其实是一个UITabBarController,也就是说,as后面你想要强制转换成的一定要与storyboard中的保持一致。

所以,代码就那么几行,但是不能生搬硬套。

如果你的storyboard中是viewcontroller,就as成viewcontroller,如果是UITabBarController就as成为UITabBarController,如果是其它的诸如UITableViewController,你知道怎么做。

时间: 2024-12-04 01:10:38

用Swift完成不同View Controller之间的切换的相关文章

Swift:超炫的View Controller切换动画

匿名社交应用Secret的开发者开发了一款叫做Ping的应用,用户可以他们感兴趣的话题的推送. Ping有一个很炫的东西,就是主界面和之间切换的动画做的非常的好.每次看到一个非常炫的动画,都不由得会想:"这个东西我要不要自己实现以下".哈哈~~~ 这个教程里,你会学到如何用Swift实现这样的很酷的动画.你会学到如何使用shape layer,遮罩和使用UIViewControllerAnimnatedTransitioning协议和UIPercentDrivenInteractive

Applications are expected to have a root view controller at the end of application launch

问题:Applications are expected to have a root view controller at the end of application launch 环境:XCode4.2 场景:这种问题多发生在XCode4.2 移植低版本项目时出现. 原因:在iOS5下,应用加载时,需要一个root view controller,在iOS5以下的版本会有MainWindow作为启动文件,iOS5以上没有了. 解决方案:手动创建一个root view controller,

ios-报错:nil modal view controller

问题描述 报错:nil modal view controller 得到了如下报错:**Application tried to present a nil modal view controller on target**.我在运行的程序是,首先判断条件是否满足,启动后修改初始化视图控制器. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( NSDictionary *)launch

ios-释放root view controller

问题描述 释放root view controller 在下面语法中有声明: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 声明是: root_view_controller = [[Root_View_Controller alloc] initWithNibName:@"Base_View" bundle : n

view controller内部全部视图旋转

iOS屏幕旋转控制在View Controller里面,包含三种controller.    其一:UIViewController及其子类.    其二:UINavigationController及其子类.    其三:UITabBarController及其子类.    每一种controller及其子类都可以写屏幕旋转控制代码.但是记住一个原则,谁加载谁获得屏幕控制的权限,被加载的controller如果要添加自适应代码,可以在- (void)willRotateToInterfaceO

Modal View Controller Example[转]

In your iPhone app, you'll probably be spending most of the time pushing new view controllers to the stack in order to show screen flow. Sometimes, though, you just want to popup a screen for quick display or input. Here's a quick demo/tutorial on th

Methods throughout the lifespan of a view controller

Method                                DescriptionloadView                              Creates or returns a view for the view controller.viewDidLoad                       View has finished loading.viewWillAppear:                    View is about to a

View Controller Transition实现京东加购物车效果

这篇文章中我们主要来叙述一下上述动画效果的实现方案.主要涉及 View Controller 转场动画的知识. 我搭建了个人站点,那里有更多内容,请多多指教.点我哦!!! Presenting a View Controller 显示一个 View Controller 主要有一下几种方式: 使用 segues 自动显示 View Controller: 使用 showViewController:sender: 和 showDetailViewController:sender: 方法显示 V

【ANDROID游戏开发之五】游戏注册界面DEMO-实现两个ACTIVITY之间的切换与数据交互!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/301.html ----------------------- 『很多童鞋说我的代码运行后,点击home或者back后会程序异常,如果你也这样遇到过,那么你肯定没有仔细读完Himi的博文,第十九篇Himi专门写了关于这些错误的原因和解决方法,这里我在博客都补充说明下,省的童鞋们总疑惑这一块:请点击下面联系进入阅读: