iOS 父子关系

时间:2022-09-13 14:22:01

1、面向对象特征,类的继承

  • 成员变量(实例变量)
    • 子类继承父类所有功能,只能直接(访问)调用父类中的.h中的protect和public成员变量(实例变量)及方法,
    • .h中的私有的成员变量,子类不能直接访问
    • .m中的成员变量,子类不能直接访问 (外部可以通过kvc 修改)
  • 属性(property)
    • 为私有的,子类不能继承,子类通过setter、getter方法访问
  • 运用
    • 自定义UI控件:
      • 想要监听哪个 view 就自定义哪个view
      • 想要在哪个view 上画东西,就自定义那个view
      • 想要改变控件里的默认布局时
    • 自定义系统的类
      • 想要重写一个方法时
      • 系统的属性不够时,不能满足需求,想要给系统的增加某些属性 如:UIBeizerPath 增加color属性
    • 自定义一个父类,实现相同的方法
    • 当几个界面,都有相同的方法,相同的东西, 抽取到父类里,不同的东西用block

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];
  • 当一个控制器添加到父控制器中时会调用 - (void)didMoveToParentViewController:(UIViewController *)parent

5、父 与 子 事件传递(由上而下)

  • 有父控件传递给子控件

6、父 与 子 事件响应(由下而上)

  • 事件由view传递给这个view的控制器后,控制器再传递给父控制器的view,然后会传递给父控制器,再传递给父父控制器的view 等等

7、实例(设置界面cell模型设计及父tableViewController的设计)

  • cell 分组样式 模型设计 , 模型中的父子、继承

    • 设计一个模型, 发现有不同的属性要记录,就分成几个子类 (面向对象,每一个都是对象)(相同的放父类,不同的写在子类)
      iOS 父子关系
  • tableViewController 中的父子继承

    • 写两个界面,发现很多相同的代码, 抽取一个父类出来,把相同的代码放到父类中

    • 不同的是, 每个界面的数据是不同的, 自己的数据自己管理


未完待完善...

iOS 父子关系的更多相关文章

  1. AJ学IOS 之控制器view显示中view的父子关系及controller的父子关系_解决屏幕旋转不能传递事件问题

    AJ分享,必须精品 一:效果 二:项目代码 这个Demo用的几个控制器分别画了不通的xib,随便拖拽了几个空间,主要是几个按钮的切换,主要代码展示下: // // NYViewController.m ...

  2. Logstash 父子关系 配置

    最近在使用Lostash的过程中遇到了一个问题:在一个log文件里包含两类数据,而且两类数据之间存在父子关系,那如何使用lostash的configuration实现这个需求呢 思路: 首先定义父事件 ...

  3. margin collapse 之父子关系的DIV

    打算花点时间将知识整理一下,虽然平时现用现查都能完成工作,可是当遇到面试这种事情的时候,临时查就来不及了... 关于margin,整理若干知识点如下: 一:父子关系的DIV标签以及未加margin时的 ...

  4. [转]NHibernate之旅(9):探索父子关系(一对多关系)

    本节内容 引入 NHibernate中的集合类型 建立父子关系 父子关联映射 结语 引入 通过前几篇文章的介绍,基本上了解了NHibernate,但是在NHibernate中映射关系是NHiberna ...

  5. Qt 对象间的父子关系

    C++中只要有一个new就必须要有一个delete与之对应 但是Qt中的对象之间有特殊的关系 Qt 对象间的父子关系 每一个对象都保存有它所有子对象的指针 每一个对象都有一个指向其父对象的指针 par ...

  6. MFC窗口的父子关系和层级关系

    一直对窗口之间的关系有些混乱,遇到需要指定父窗口的函数时常常要考虑很久,究竟父窗口是哪个窗口,遂上网查资料,略有所悟,简记如下: 对话框中的所有控件(比如Button等)都是其子窗口.        ...

  7. oracle处理节点之间的父子关系

    通常当与树的结构之间的关系处理,这是一个很复杂的事情,我们可以通过程序代码去逐层遍历父或子节点,这样做的缺点是很明显,效率不高,操作复杂性是比较大的.而当我们使用Oracle当数据库,我们可以有一个简 ...

  8. SQL SERVER 2000 遍历父子关系数据的表(二叉树)获得所有子节点 所有父节点及节点层数函数

    ---SQL SERVER 2000 遍历父子关系數據表(二叉树)获得所有子节点 所有父节点及节点层数函数---Geovin Du 涂聚文--建立測試環境Create Table GeovinDu([ ...

  9. SpriteBuilder物理对象的父子关系

    注意:打开物理使能(Physics-enabled)的节点忽略他们的父节点关系. 这意味着,一个物理使能的子节点不会随着其父节点移动. 物理引擎对于节点父子关系这个概念毫不知情,因此单独的对待所有物理 ...

随机推荐

  1. sql 2005,2008开启bcp的方法嗯哈步骤

    sqlserver 2008开启bcp服务的方法和步骤 sqlserver 2005开启bcp服务的方法和步骤 在开始菜单中找到sql server 2005 -->> 配置工具 --&g ...

  2. [转]SIP穿越NAT&FireWall解决方案

    原文链接(也是转载)http://blog.csdn.net/yetyongjin/article/details/6881491.我修改了部分错字.   SIP从私网到公网会遇到什么样的问题呢? 1 ...

  3. cocos2dx-lua之断点调试支持

    cocos2dx 3.2版对cocos code ide支持已经相当棒了,不过话说,编辑器用起来感觉没有sublime顺手 支持cocos code ide已经支持创建lua项目了,可是默认创建的项目 ...

  4. Hibernate 关联关系映射实例

    双向多对一/一对多(many-to-one/one-to-many) 例子,多个学生对应一个班级,一个班级对应多个学生: 班级类,Grade.java: public class Grade { pr ...

  5. psl/sql本地与远程连接配置

    一:下载Oracleclient 下载地址:http://www.oracle.com/technetwork/database/features/instant-client/index-09748 ...

  6. [Vim]vim使用笔记--分屏操作

    我们经常要打开多个文件,不同的窗口操作多个文件,分屏就很好用了. 1 命令模式下: :new,新建文件并分屏, 快捷键,Ctrl+W,然后马上按n键 :spilt 水平分屏,将当前屏分为两个,水平的. ...

  7. Remove Google Play Games libraries on iOS (Unity3D开发之二十一)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/48313653 ...

  8. ruby用来发送互联网邮件

    其实只要你任性的可以,用telnet也是可以发邮件的哦.不过本猫没那么任性,还是用KISS原则来发邮件吧.本篇博文只介绍了如何发邮件,但没涉及收邮件的事,以后如有机会会单独开一篇博文介绍. ruby通 ...

  9. java 操作elasticsearch之搭建测试项目环境

    在创建项目之前请确认maven是否安装好,在此我是以环境都搭建好的情况下进行示范,现在以eclipse开发工具为例,具体操作如下: 1.创建maven项目 File - new -other 2.在p ...

  10. 使用xftp连接到ftp服务器即常见问题的解决

    使用xftp连接到ftp服务器 新建连接 配置连接 点击确定,连接到ftp 常见问题 中文乱码问题 解决: 点击连接设置按钮 修改编码方式 最后确定保存!刷新一下,就不在乱码了;