转载

每日一博 | iOS 可视化编程(全系列)

背景

本人比较喜欢用Xib来写项目, 效率高又不存在冲突问题, 很爽很方便(当然纯代码编程很多情况还是很有用的)。本篇文章将可视化编程用到的技术全部进行了统一整理, 相信全部看完时对于可视化编程了如指掌, 那么我们开始吧。

他山之石

这有一位大牛对从原理讲起, 到约束, 到自动布局, 讲的非常精彩。学完记得回来哦!

  1. 自动布局的基本原理:  http://blog.csdn.net/pucker/article/details/41832939
  2. Interface Builder的使用:  http://blog.csdn.net/pucker/article/details/41843511
  3. NSLayoutConstraint:  http://blog.csdn.net/pucker/article/details/45070955
  4. VFL:  http://blog.csdn.net/pucker/article/details/45093483
  5. 动态修改约束:  http://blog.csdn.net/pucker/article/details/45149759#t4
  6. SizeClass的使用:  http://blog.csdn.net/pucker/article/details/49925335#t2

看完大神的文章, 相信大家对Xib已经非常的熟悉了, 那我再来补充些日常使用的技巧与经验。

自定义VIew与Xib关联

需求: 项目中经常自定义一个控件, 可是父类不是UIViewController的话Xcode不提供Xib支持, 需要自己单独创建Xib, 然后与代码关联起来。本节讲的就是如何与代码关联起来。

参考的话, 可以看我封装的日历选择器 : http://my.oschina.net/ChenTF/blog/682971

1. 代码与View关联

每日一博 | iOS 可视化编程(全系列)

2. 清空File's的关联, 如果不清空, 创建Xib时会崩溃

每日一博 | iOS 可视化编程(全系列)

3.清空File's的关联

每日一博 | iOS 可视化编程(全系列)

4. 初始化方式

建议在.h中提供一个类方法, 将初始化封装到内, 我一般命名喜欢用 "+  (instancetype)ViewWithNib"。

    WBCellSubBarView *cellBar = [[[NSBundle mainBundle] loadNibNamed:@"WBCellSubBarView" owner:self options:nil] lastObject];     cellBar.frame = CGRectMake(0, 0, kScreenBoundWidth, height);

提示:

  • 一定记得要设置Frame
  • 通过Nib方式创建出来的对象, 不会走 "initWithFrame" 方法, 走的是"awakeFromNib"方法, 如果有初始化应写在这里。

5. 参考:

  • Xib操作技巧:  http://my.oschina.net/joanfen/blog/314763?fromerr=GDndFVM4
  • VC关联多个Xib:  http://www.cnblogs.com/minglz/archive/2012/12/11/2809368.html

自定义Interface Builder上的属性

效果图

一直很羡慕系统提供的视图可以在Xib上直接修改属性, 并且能立即看到变化的结果。本节就是自己实现的方式, 方框内的是自定义属性。

每日一博 | iOS 可视化编程(全系列)

实现方式

1.在自定义.h类中设置( IB_DESIGNABLE /  IBInspectable )

每日一博 | iOS 可视化编程(全系列)

2.在.m中重写set方法, 就能实现对应的功能

每日一博 | iOS 可视化编程(全系列)

内部探索

  • 初始化时的调用顺序:  initWithCoder -> 各个IBInspectable的属性方法 -> layoutSubviews
  • 当在 "面板" 设置完属性后, 在User Defined Runtime Attributes中会出现对应的设置, 再结合调用顺序, 猜测是通过运行时来实现的

原文  http://my.oschina.net/ChenTF/blog/683042?fromerr=zzp0ACiy
正文到此结束
Loading...