一天一点xib:9结束语

引言

这是xib系列文章的最后一篇,希望这一系列文章能让大家对xib产生“爱恋”。

iOS9中关于xib的一些新特性

之前说过要介绍一下iOS9中有关xib的一些东西。现在简单说一下。我个人认为iOS9与xib相关的东西主要就是UIStackView和storyboard reference的引入。

UIStackView

本来想在这部分好好介绍一下UIStackView的,不过看到网上翻译的一篇文章iOS9:UIStackView入门,(原文:iOS9:Getting Started with UIStackView)瞬间感觉再怎么努力写也不可能写的比人家好了,所以大家可以去看看这篇文章,如果对UIStackView感兴趣的话。还像我一天一点xib:5当xib遇到auto layout中说的那样:

其实普通的UIView也可以作为容器view来管理其subView的约束,我们之前做复杂UI显示逻辑的时候往往也会放一个背景的容器view,stack view就是起到这个作用,意义不是很大,它做的事情UIView也可以做,但是他的优势在于:可以通过设置属性的方式让系统自动添加对其subView的约束。

如果你对UIStackView十分感兴趣,但又无奈仅支持iOS9,那么github上一个开源项目FDStackView可以帮你解决这个问题,你可以在用FDStackView的时候无需考虑低版本兼容的问题,FDStackView自动就帮你解决低版本上的问题了。

是不是感觉到很神奇?如何做到让高版本才出现的类在低版本中也能用的?这不科学啊?对,这的确不科学,它就是一个魔术,关于这个问题我打算写一篇文章来说说,实际上我也写了一个GJAlertController的开源项目,也是解决在低于iOS8中使用UIAlertController的问题。放在了github的GJGroup组中(这是我和同事们成立的一个组,希望大家支持一下里面的项目,都很有意思)。

storyboard reference

先简单介绍一下storyboard reference是干什么用的,iOS开发中是重应用程序、重导航这些概念的,从UINavigationController、UITabBarController的使用中就能看出来,不像Android开发是重Activity,轻应用这些概念。这就导致,我们绝大多数项目都是这样设计的:(通常tabbar常驻底部的是方式一,tabbar随着push消失的是方式二)

无论哪种方式,delegate.windwo.rootController都对应我们的Main.storyboard,就是说如果我们用SB组织项目,所有的VC其实都放在了Main.storyboard中管理,这显然是不好的:

1.SB文件会经常冲突,因为所有VC都在里面,这样不利于团队开发(虽然我们现在能很好的解决SB文件的冲突)。

2.SB管理的VC过于多,不利于修改SB文件,Xcode加载巨大的SB文件的时候有时会出现卡顿

基于这两点,我们有两种解决方法:

1.指定delegate.windwo.rootController的时候不用系统指定,就是说不用Main.storybaord(具体方法之前有说过),而是用代码创建,当代码创建各个tab对应的VC的时候,去加载各自的SB文件,eg:

FirstController *firstVC = 
[[UIStoryboard storyboardWithName:@"First" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"FirstController"];

SecondController *secondVC = 
[[UIStoryboard storyboardWithName:@"Second" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"SecondController"];

tabVC.viewControllers = @[firstVC, secondVC];

2.如果你感觉上述方法比较low的话,那么storyboard reference来了,它可以不用写代码就能解决这个问题,思路是,一个SB文件中的Segue(带有像扣子一样的线)可以指给一个reference,而一个reference指向另一个SB文件,这样就把集中在SB中的VC分散到了各个SB中去,而Main.storybaord中的segue大多都指向这些reference。

同样网上有一篇iOS9学习系列:Storyboard Reference文章已经写的非常好了,我再怎么写也都是画蛇添足,班门弄斧。

同样的问题来了:如何才能兼容低版本?总不能直接就从iOS9开始吧,答案是:使用RBStoryboardLink

我个人认为苹果是封闭中带有开放的,它把很多好的开源项目的功能或者用户的强烈需求,都在接下来的iOS系统中得到解决了,比如iOS8中应用程序扩展得以实现自定义键盘,iOS9中的storyboard reference、之前没有的Json解析、base64...都陆续的支持了。而Android是开放中带有封闭的,比如Android6.0中的权限管理。

好了,说回RBStoryboardLink,它是在iOS9之前解决上述问题的一个很好的方法,下面具体来说说RBStoryboardLink的用法的,现在从兼容的角度来说,还是RBStoryboardLink来的实在。

RBStoryboardLink

1.新建一个SBDemo工程,创建基于tabbarController的程序,我们这里有两个item:First和Second,并新建First.storyboard和Second.storyboard文件

2.引入RBStoryboardLink。我们这里用pod方式。打开终端进入到工程文件所在文件夹下,执行pod init,这时文件夹中多了一个Podfile文件,打开Podfile文件,编辑:

target 'SBDemo' do

pod 'RBStoryboardLink'

end

执行pod update --no-repo-update,完成后打开SBDemo.xcworkspace

3.分别把Main.storyboard中的Firt、Second的class设置成RBStoryboardLink

4.添加runtime attributes

5.在First.storyboard和Second.storyboard中添加一些控件运行看效果

功能实现了,但是状态栏出了问题了,这是layout的问题,在runtime attributes里加入:

再运行,搞定。

最后的总结

添加runtime attributes的功能我们讲过,但是没有讲添加系统之外的属性,而RBStoryboardLink中添加的就是系统之外的属性,说这个是想让大家知道,xib的学习是很有魅力的,你可以发挥自己的想象力去做事情,大胆的假设,然后去验证,看看xib能不能实现你想要的功能,这些细小的知识点,不一定网上都有,很多东西都是要靠你自己使用然后总结经验,然后发扬光大的。这个过程真的很酷,可能别的程序员写了好多代码,费了好大劲才弄出来的东西,你通过巧用xib轻松的实现了,这是很有成就感的事情,希望大家对此能够有所体会。

在使用xib的时候并不是一帆风顺的,会遇到很多挫折,比如,在xib中用ScrollView就是一件很痛苦的事情,因为系统要通过它的子控件的布局约束来确定自己的contentsize的,而这个过程可能很痛苦,怎么设约束都有问题,说这个不是要说应该怎么解决,而是要说没有什么是一帆风顺的,这九篇文章不能面面俱到的说出一切,我也没有这个能力,在这里就是想尽我所能,让大家对xib产生一点“爱恋”,就可以了。

欢迎大家和我交流沟通,若文章中有错误和纰漏,恳请指正,谢谢。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,194评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,058评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,780评论 0 346
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,388评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,430评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,764评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,907评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,679评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,122评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,459评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,605评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,270评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,867评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,734评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,961评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,297评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,472评论 2 348

推荐阅读更多精彩内容

  • 引言 首先来一个官方说明: A nib file describes the visual elements of...
    二亮子阅读 8,915评论 20 54
  • 引言 学到这里,xib给我带来的帮助已经很大了,最大的莫过于UI控件的创建、属性的赋值再也不用写代码,就UI开发来...
    二亮子阅读 7,225评论 41 82
  • 引言 之前说了xib的优缺点、如何应用、解决文件冲,算扫了xib学习上的一只拦路虎,现在我们就开始具体的学习一下x...
    二亮子阅读 10,873评论 7 38
  • 引言 这两天突然想起之前看到过有的项目中用到了object, 好奇心起,就顺便回溯下xib的使用吧 xib优缺点分...
    舞动梦想阅读 1,937评论 0 3
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,059评论 4 62