开发者社区> michaellee> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

用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,你知道怎么做。





版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
iOS开发swift版异步加载网络图片(带缓存和缺省图片)
iOS开发swift版异步加载网络图片(带缓存和缺省图片)
210 0
用 Swift 开发我的第一个 iOS 应用前,我想要知道这些内容
本文讲的是用 Swift 开发我的第一个 iOS 应用前,我想要知道这些内容,Swift 是一款由苹果公司(世界最大的公司之一)创立的编程语言。这也表明了许多事:首先,苹果并不避讳向自己的平台中引入重大的更新。你需要知道的是,这里的重大更新,我指的是包括优先级更新在内的一系列更新措施。
1226 0
[译]iOS 开发中使用 Swift 进行 iBeacons 交互指南
本文讲的是[译]iOS 开发中使用 Swift 进行 iBeacons 交互指南,我最近致力于研究一个关于 iBeacons 的 iOS 项目。本文中,我将全面的介绍如何使用 Swift 进行 iOS 项目中 iBeacons 开发。
1058 0
iOS - Swift iOS 开发体系
1、iOS 开发技术体系 iOS 开发技术体系图: 层级 主要框架 Cocoa Touch UIKit 等 Media Core Graphics 、OpenGl ES、Core Animation 等 Core Services Core Data、Foundation 等 Core OS Accelerate Framework、External Accessory Framework、Security Framework、System 等 从图中可以看到,要想编写成型的产品,需要的不仅仅是语言本身,同时许多库需要协同使用。
937 0
Swift语言IOS8开发战记26 NSURLSession加载数据、上传下载
 NSURLSession类支持三种类型的任务:加载数据、下载和上传,即Data Task,DownLoad Task和Upload Task。
764 0
swift语言IOS8开发战记23 Core Data4
    这后面的部分痘子的视频已经不讲了,我自己看着英文书试着给大家讲的,书名叫《Beginning IOS8 Programming with Swift》,感兴趣的同学自己搜一下哈。
850 0
Swift语言IOS8开发战记7.Delete TableViewCell
之前演示了Alert和ActionSheet的用法,如果我们不想要某一行cell了,那么就需要删除选项。
1161 0
+关注
65
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载