1、面向对象特征,类的继承
- 成员变量(实例变量)
- 子类继承父类所有功能,只能直接(访问)调用父类中的.h中的protect和public成员变量(实例变量)及方法,
- .h中的私有的成员变量,子类不能直接访问
- .m中的成员变量,子类不能直接访问 (外部可以通过kvc 修改)
- 属性(property)
- 为私有的,子类不能继承,子类通过setter、getter方法访问
- 运用
- 自定义UI控件:
想要监听哪个 view 就自定义哪个view
想要在哪个view 上画东西,就自定义那个view
想要改变控件里的默认布局时
- 自定义系统的类
想要重写一个方法时
系统的属性不够时,不能满足需求,想要给系统的增加某些属性
如:UIBeizerPath 增加color属性
- 自定义一个父类,实现相同的方法
- 当几个界面,都有相同的方法,相同的东西, 抽取到父类里,
不同的东西用block
- 自定义UI控件:
2、父子控件(superView 、subviews)
- 子控件的索引
- 添加到subviews 之前 NSUInteger index = self.shopsView.subviews.count;
- subviews indexOfObject
- 如果说一个控件隐藏时,他里面的子控件也跟着隐藏
- 如果说一个控件透明时,它里面的子控件也跟着透明
- 当子控件超出父控件范围时,是可以显示的(clipsToBounds属性),但默认是不能接受事件
- 把一个控件添加到自己的superView上时,先要看自己又被有在之前有父控件
- 当一个视图添加到父视图上时会调用 - (void)didMoveToSuperview
3、父子层(layer)
任何主视图中添加子控件,子控件的layer也添加到主视图的layer上,成为主视图layer的子层。
- Layer与View
- CALayer : frame bounds position anchorPositon
- UIView : frame bounds center
- 改变UIView (控件)的主层 (根layer)的frame、bounds 大小尺寸 相当于修改了 控件的大小尺寸
- 改变UI控件的主层的contentsRect 让控件只显示出一部分内容
- 自定义Layer
- 可展示一些图片,可绘制一些形状,不能与用户交互,不接受事件
- 隐式动画(非根层,改变某些带动画的属性)
- 渐变层 CAGradientLayer
- 复制层 CAReplicatorLayer 配合核心动画使用
- 形状层 CAShapeLayer
4、父子控制器
- 任何控制器可以管理任何控制器(包括普通VC管理Nav 、tabBar),比较大的视图且业务逻辑复杂,必须有一个控制器管理该视图
- 父子关系
- 如果2个控制器的view是父子关系(不管是直接还是间接的父子关系),那么这2个控制器也应该为父子关系
[a.view addSubview:b.view];
[a addChildViewController:b]; - 或者
[a.view addSubview:otherView];
[otherView addSubbiew.b.view];
[a addChildViewController:b];
- 如果2个控制器的view是父子关系(不管是直接还是间接的父子关系),那么这2个控制器也应该为父子关系
- 当一个控制器添加到父控制器中时会调用 - (void)didMoveToParentViewController:(UIViewController *)parent
5、父 与 子 事件传递(由上而下)
- 有父控件传递给子控件
6、父 与 子 事件响应(由下而上)
- 事件由view传递给这个view的控制器后,控制器再传递给父控制器的view,然后会传递给父控制器,再传递给父父控制器的view 等等
7、实例(设置界面cell模型设计及父tableViewController的设计)
cell 分组样式 模型设计 ,
模型中的父子、继承
- 设计一个模型, 发现有不同的属性要记录,就分成几个子类 (面向对象,每一个都是对象)(相同的放父类,不同的写在子类)
- 设计一个模型, 发现有不同的属性要记录,就分成几个子类 (面向对象,每一个都是对象)(相同的放父类,不同的写在子类)
tableViewController 中的父子继承
写两个界面,发现很多相同的代码, 抽取一个父类出来,把相同的代码放到父类中
不同的是, 每个界面的数据是不同的, 自己的数据自己管理
未完待完善...