关于storyBoard的一些小问题与总结
在iOS界面这块,要么使用Nib文件、要么就直接写在代码里面了,没有用过storyBoard,一直很好奇,今天看完之后想想还是做个总结吧,很多东西都比较细节。
为什么要用storyBoard?好在哪里?
从用完的感觉上来说,确实方便,能够迅速的建立起各个界面之间的连接关系,跳转什么的,后期修改连接也是很容易的。
但是,从另一个角度出发,storyBoard比较适合小型程序,或者说界面比较少的程序,因为当界面较多时(有很多Tabbar、tableView),storyBoard会比较乱,而且站在团队开发这一点上,需要专门的人去维护storyBoard。
本文并不是storyBoard的教程,也不需要= =,因为网上已经有大神写的很详细的了(自叹不如啊),本文只是小小记录一下笔者在学习storyBoard的时候遇到的一些问题以及解决技巧。
一、 可以不用mainStoryboard而用自定义的吗?
可以的,第一步新建User Interface中的Storyboard,第二步修改info.plist里面的Main storyboard file base name 为自己的storyboard就可以了。
二、 Terminating app due to uncaught exception'NSGenericException', reason: 'Push segues can only be used when the sourcecontroller is managed by an instance of UINavigationController.
这个错误的意思是,在连接两个viewController的时候,使用了“push”的方式,但是源viewController不是UINavigationController的实例,所以异常,程序终止。
解决这个错误有两种方法:
第一个:是在用“Ctrl”连接两个viewcontroller的时候,不要用“push”的方式,而用“modal”的方式。
第二个:就是添加一个UINavigationController咯。
从library中拉出一个到canvas上。
在这一步的时候网上很多地方都没讲清,我就讲细一点。
可以看到拉出来的Navigation Controller还跟着一个Table viewController。如果你的导航不用包含一个tableView的话,直接删掉即可,没问题。
要注意的是现在这个Navigation Controller只是一个导航栏,没有内容(run一下你只能看到导航栏,然后下面是黑的。。)
然后我们添加一个最简单的viewController,然后在NavigationController按住“ctrl”拖动到viewController上,会弹出一个黑色的框。
说明一下这几个选项的作用,push是用导航(navigation)的形式跳转,modal是以模态的形式展现,custom当然就是自定义了,不用深究。
最后Relationship Segue—root view controller才是我们要选择的。
它的意思是把viewController当作根控制器添加到NavigationController中去,跟跳转没半毛钱关系,请注意。。连接之后符号是:
添加完成之后再想怎么跳转都行,只要在viewController里面添加控件便可以了。
注:同理TabBar也是一样的,也是连接RelationshipSegue来填充内容。
三、storyBoard里面的view怎么和viewController联系起来
在Class里面写出需要的viewController的名字就可以了,就可以连接界面上的输出口了(或者整个界面都写在viewDidLoad里面也行呢)。
像这样view就和viewController联系在一起了,整个逻辑立马就通了。首先通过storyBoard编辑好界面和跳转,再通过Class把对应的控制器连接起来,得到输出口和Action的触发事件。四、怎么设置storyBoard的开始,即起始场景?
也有两种方法
第一个:
注意到这个箭头了吗,这个就是起始的标志,直接拖动想要修改为起始场景的那个viewController就可以了。
第二个:点击一个viewController
勾上Is Initial ViewController就行了。
Ok,搞定,面朝大海,春暖花开。
杨光(atany)原创,转载请注明博主与博文链接,未经博主允许,禁止任何商业用途。
博文地址:http://blog.csdn.net/yang8456211/article/details/13005429
博客地址:http://blog.csdn.net/yang8456211
—— by atany
本文遵循“署名-非商业用途-保持一致”创作公用协议