结合《iOS开发捷径学习》这本书,分几章系统梳理Interface Builder相关知识。


整体现状

iOS界面的开发,主要是采用纯代码和Interface Builder来进行。苹果开发初期面临很少的可用内存,纯代码进行UI的绘制自己控制对应内存的申请和释放,可以最大限度的控制内存,提高效率。现在随着手机设备的不断升级换代,内存越来越大,IB开发逐渐走入大家的视野。

采用IB开发优点显而易见,开发维护效率高,适配简单,控制器内UI代码减少,减少控制器的代码,在经典MVC下减少控制器的代码。IB开发比较适合创业型公司的开发,创业公司iOS开发可能比较少,一两个人负责一个项目,版本迭代频繁,业务与效率优先,使用IB开发跑的更快。技术上来说苹果本身对于IB开发比较重视,不断对IB开发进行优化。从最开始的xib发展到storyboard开发,减少了更多的胶水代码。当然另一方面,xib使用的弊端也显而易见,显然效率显然会低一些,毕竟多一步加载nib或storyboardc文件的过程;再者有一定的学习成本,毕竟和纯代码开发有不少内容需要学习,当然这些学习成本还是值得的;最后多人协作也容易产生冲突。


基本常识

何为xib?即以xml形式存储的UI相关数据,它是一个资源文件。xib编译后生产nib文件,storyboard编译后生产storyboardc文件。ipa包解压后可以看到这些编译后的文件:nib,storyboardc以及资源bundle。

编译后的文件.png

有了xib和sb文件,我们就可以从show the object library中找到对应的控件拖拽到控制器或view上添加我们的控件了,控件的创建有了,如果使用过Masonry,布局的使用也是类似的,设置左右上下边距或者控件高度等约束来确定一个控件的相对位置,甚至不用一行代码就可以运行一个helloworld的demo出来。

常见要点:

1.冲突的解决:和解决代码冲突一样,只需要将xib文件用soure code打开,找到文件中的<<<<<<=======>>>>>>,分析差别,删除多余的代码就可以。

2.sb文件的增大或者出于解耦的考虑,我们可以使用多个sb文件来解决。使用时Storyboard ID来找到对应的sb文件行初始化,然后就可以得到sb文件内任何控制器。

3.使用xib:loadNibName可以load同一个xib中不同的view的,进而实现分别调用,实现一个view类,派生不同子类实例。

image.png

如上图两个控件是一个view中的两个子控件,用于不同情况下展示不同的样式。使用时只需在初始化时根据实际情况选择不同的子view进行初始化就好了。
具体代码:
[[NSBundle mainBundle] loadNibNamed:@"FQHShareItemView" owner:nil options:nil][0]
[[NSBundle mainBundle] loadNibNamed:@"FQHShareItemView" owner:nil options:nil][1]

作者:智小融
链接:https://www.jianshu.com/p/3a04ebde7e0f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

iOS开发捷径学习(一)相关推荐

  1. 0811 iOS开发完整学习路线

    1.iOS开发需要学习哪些内容? 2.开发步骤 3.框架 为了方便开发者开发出强大的功能,苹果提供了各种各样的框架 [1]UIKit:创建和管理应用程序的用户界面 [2]QuartzCore:提供动画 ...

  2. iOS开发的学习笔记

    引言 之前做过半年的iOS开发,从完全不懂的移动开发的菜鸟,到完成前端UI开发的菜鸟,做的一些笔记,希望对大家有用,也希望这些总结的东西对以后会有作用. 开发环境 iOS的系统框架分为四个层次: 核心 ...

  3. iOS开发规范学习总结与框架搭建

    iOS 开发规范 以MVC开发模式为主,根据模块化+MVC思想 一.模块化思想创建目录路径(创建真实路径,再拖到项目中不要直接创建Group) M -- 模型,模型对象封装了应用程序的数据,并定义操控 ...

  4. 开始学习 IOS 开发,学习环境搭建

    1,IOS环境安装 直接从 AppStore上面下载,网络环境一定要好 2.45G 2,学习视频 在网上搜索到的.youku的视频. http://v.youku.com/v_show/id_XMzI ...

  5. ios开发网络学习:一:NSURLConnection发送GET,POST请求

    #import "ViewController.h"@interface ViewController ()<NSURLConnectionDataDelegate> ...

  6. ios开发网络学习九:NSURLSessionDownloadTask实现大文件下载

    一:NSURLSessionDownloadTask:实现文件下载:无法监听进度 #import "ViewController.h"@interface ViewControll ...

  7. iOS开发脚踏实地学习day01-02-加法计算器和图片移动缩放旋转

    1.NSString类型和int类型互换: int inta; NSString *stra; 1)将NSString类型转为int 类型 inta = stra.intValue;//字符串本身就是 ...

  8. iOS开发脚踏实地学习day02-图片查看器和TOM猫

    1.在.m文件中使用self.XX和_XX有什么区别? 在用懒加载,使用getter,让对象在最需要的时候创建时,用_XX实现不了,一定要用self.XX才可以. 前者调用该类的setter或gett ...

  9. iOS开发脚踏实地学习day15-画板

    //开启/获取/关闭上下文的用UIGraphics... //配置上下文的用CGcontext... 1.图像添加logo - (void)viewDidLoad { [superviewDidLoa ...

  10. iOS开发脚踏实地学习day14-绘图

    1.画线步骤 - (void)drawRect:(CGRect)rect { // Drawing code //1.获取上下文 CGContextRef context = UIGraphicsGe ...

最新文章

  1. 使用Python可视化卷积神经网络方法汇总
  2. 长文 | 腾讯提出 AI For FEW 构想,呼吁人工智能为地球思考
  3. url在python_Python中url标签使用详解
  4. 计算机专业的三行情书,各专业三行情书,看懂你就是全能学霸!
  5. 【clickhouse】clickhouse 表引擎之 set
  6. 计算机系统缺陷,4.2 缺陷和测试计算机操作系统原理.pdf
  7. 赶在世界末日前完成的2012年全年总结
  8. 【Pix4d精品教程】pix4d mapper相机未校准后手动添加连接点完美案例图文教程
  9. 我国研发出勒索病毒防御软件:能阻止其破坏文件
  10. iPhone6和iPhone6Plus的适配
  11. 【MongoDB-MongoVUE图像管理工具】
  12. pytorch seq2seq模型中加入teacher_forcing机制
  13. narwal机器人_欧美追捧的中国黑科技产品,Narwal云鲸全自动扫拖机器人
  14. micropython-SPI通讯
  15. jmpi 与ljmp指令分析
  16. JavaScript如何判定一个给定的时间区间在哪些时间段范围内?
  17. 【STM32】STM32CUBEMX + ADC(单通道,双通道DMA)
  18. 程序员这样学英语,少走很多弯路
  19. 变色龙给驱动打补丁实现USB驱动无需USBInjectAll.kext
  20. Java学生信息管理系统(增、删、改、查)

热门文章

  1. EL 和 JSTL练习题
  2. sublime全解:从菜鸟到大师
  3. 怎么把QQ音乐里wav格式转换成MP3
  4. 数据结构C语言般卷纸真题,数据结构(C语言版)考研真题(A卷)
  5. 在线有道词典,又添新特色了!
  6. 微信app支付签名错误
  7. Fullcalendar 在vue中鼠标hover显示悬浮框(tippy.js插件)
  8. 水彩画笔效果PS笔刷
  9. mysql 包括冒号_mysql – 在JPA查询中转义冒号字符’:’
  10. Postgresql 学习记录,模式,分区表,触发器,事务,窗口函数,视图,建表,约束等