美文网首页
iOS上的include --- PlaceHolderV

iOS上的include --- PlaceHolderV

作者: Halin_Lee | 来源:发表于2016-04-07 19:55 被阅读0次

    前言

    小弟从事移动开发,从Android入门,再兼做iOS,总的来说Android和iOS的思路是相同的,但细节上还是有不少出入.iOS的xib非常强大,特别是User Defined Runtime Attributes,相对于Android只能通过attrs更是有过之无不及,当然,有好就有坏,使用iOS的时候,最不习惯的,就是没有include,后来Google了一下,也只能通过代码硬编码,初始化一个view并且自行实现约束,无法直接映射,直到有天发现了awakeAfterUsingCoder:这个方法,也就有了PlaceHolderView这个库

    项目链接:

    https://github.com/Halin-Lee/PlaceHolderView.git

    pod 'PlaceHolderViewLib'

    简单实现

    1.在任意.m文件添加 PlaceHolderViewClass 宏,参数为xib文件名称,如图:

    宏将自动添加一个名为HLSimpleDemoSubView和一个名为PHHLSimpleDemoSubView的类

    2.在xib中需要使用到的地方,添加一个view,改名为 PH+宏参数名称,如PHHLSimpleDemoSubView,

    3.运行,可以看到,PHHLSimpleDemoSubView已经被直接替换

    进阶

    很多时候,我们可能不止需要简单的替换view,还需要为view初始化一些效果,这时候,可以使用进阶方式构造

    1.新建一个子类及xib,继承PlaceHolderInitDelegate,并在commonInitCallByPlaceHolderView实现自定义方法,如图

    2.将xib的根view定义为上面构建的类,如HLBaseDemoView,拉出outlet

    3.在xib中需要使用到的地方,添加一个view,改名为 PH+宏参数名称,如PHHLSimpleDemoSubView,同简单实现的第二步

    4.运行,可以看到,PHHLBaseDemoView已经被直接替换,点击文本,能看到在commonInitCallByPlaceHolderView设置的动画效果,如图

    多屏适配

    PlaceHolderView不止可以实现view的映射,如果有需要,还能实现多屏适配,具体实现

    1.添加与原xib同名的适配xib,具体名称为,名称_长_宽,如图

    2.运行效果,

    在iPhone 6sp上 其他尺寸效果

    为什么需要使用commonInitCallByPlaceHolderView

    苹果建议的View初始化是在awakeFromNib中实现,但因为使用了awakeAfterUsingCoder来替换View,导致了view在awakeAfterUsingCoder初始化的时候调用了一次awakeFromNib,接着在被添加到父类的时候,又调用了一次awakeFromNib,容易导致异常,所以需要使用commonInitCallByPlaceHolderView

    后语

    苹果在推行storyboard的时候,有一个比较坑的问题就是所有的UI几乎都在同一个storyboard文件上实现,很容易导致storyboard文件臃肿,牵一发动全身,PlaceHolderView提供了另一种解决这个问题的办法,那就是storyboard只定义页面跳转和UIViewController的层级关系,具体的UI实现通过映射,在xib上实现,示例代码里面的Main就是以这种方式实现,storyboard的View只是一个壳,具体的实现在HLMainView做

    第一次写技术文章,第一次发技术库,望多多指教,感谢...

    相关文章

      网友评论

          本文标题:iOS上的include --- PlaceHolderV

          本文链接:https://www.haomeiwen.com/subject/uogmlttx.html