封装.抽取分类思想

1.分析界面,界面非常简单,界面内容固定,直接使用xib来描述

注意:使用xib要先绑定类,还需要连线

如果是在创建类的同时也创建xib就可以省略上面操作,   系统自动帮我们做了

2.登录注册界面分析

复杂界面(子控件非常多)

2.1划分结构(顶部,中间,底部)

2.2创建占位视图,占据结构位置

2.3一个结构一个结构做

3.把每一块结构都单独封装起来,   为什么?

方便以后需求变更,我们来改代码

封装的时候可以考虑两点:

1.如果界面是固定的,直接用xib来封装

2.如果该结构以后可能只是在当前界面位置变动,可以把结构模块封装到一个view里面(占位思想)

4.把登录模块封装到xib

4.1 图片圆角处理

1.自己给原来的图片设置圆角

self.loginButton.layer.cornerRadius = 5;

self.loginButton.layer.masksToBounds = YES;

//self.loginButton.clipsToBounds = YES;

2.用美工给的带圆角的图片,不过要设置可拉伸区域

为什么,图片会被拉伸的很难看(不规则的图片可能设置不成功)

bgImage = [bgImagestretchableImageWithLeftCapWidth:bgImage.size.width*0.5topCapHeight:bgImage.size.height*0.5];

在哪里设置?awakeFromNib

// 如果执行了awakeFromNib,说明当前控件在xib中所有属性全部设置好

// 只要在awakeFromNib里面,就能获取到xib中所有属性

5.设置输入文本框

5.1文本框有背景,怎么设置?

先设置一个ImageView,设置图片为背景图片

5.2 ImageView里面xib不能拖进去子控件?怎么办?

弄一个View,把ImageView放进去,View的大小正好是两个输入框的大小

5.3 在view里面拖进去两个UITextField 等分view

5.4 设置占位文字

6.抽取frame分类

6.1为什么抽取这个分类?

项目中很多地方都要用到frame.origin.x/y    frame.size.width / hight 我们不能直接修改,要先定义属性=frame.然后修改  再赋值回去很麻烦

6.2 给谁抽取分类?

给UIView抽取分类,所有的控件都能用了

6.3 怎么让自己的分类成员变量名称和其它人的名称不会重复

给成员变量名称加上类前缀

7.自定义快速登录视图

7.1 使用xib搭建界面

7.2 快速登录按钮需要自定义,为什么?

需求要求按钮内部图片在上, 文字在下,系统的是图片在左,文字在右

7.3 怎么自定义按钮

新建一个类继承UIButton   在layoutSubviews里面修改尺寸

7.4 运行发现 文字不能显示完全,为什么?

label的尺寸比文字的尺寸小,显示不完全

7.5 怎么解决

  1.计算文字的尺寸,让label的尺寸和文字尺寸一样就可以了

  2.让label尺寸自适应sizeToFit

- (void)layoutSubviews

{

// 一定要调用layoutSubviews

[superlayoutSubviews];

self.imageView.xmg_centerX=self.xmg_width*0.5;

self.imageView.xmg_y=0;

// 设置label尺寸

// 计算文字尺寸 设置label尺寸

//    CGFloat w = [self.titleLabel.text sizeWithFont:[UIFont systemFontOfSize:18]].width;

//    self.titleLabel.xmg_width = w;

[self.titleLabelsizeToFit];

// 设置中心点

self.titleLabel.xmg_centerX=self.xmg_width*0.5;

self.titleLabel.xmg_y=self.xmg_height-self.titleLabel.xmg_height;

}

8.xib注意点

8.1 加载xib的时候,要不要设置xib的frame?

要     如果一个控件通过xib加载,默认跟xib一样尺寸

如果一个View通过xib加载,需要再次设置frame

8.2 在哪里设置?在viewDidLoad设置子控件的frame,好不好?

不可以,viewDidLoad里面控制器View的子控件的尺寸还没有设置,viewDidLayoutSubviews会重新调整内部子控件的位置

viewDidLayoutSubviews:控制器的方法

layoutSubview:控件的方法

8.3 怎么拿到xib描述的View 设置约束?

  1. 定义成员变量,赋值

  2.xib的view都添加到对应的父控件中,我们可以从对应的父控件的subviews数组里面取

XTLoginRegisterView*registerView =_middleView.subviews.lastObject;

时间: 2024-10-12 23:42:58

封装.抽取分类思想的相关文章

Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类

?? Android RecyclerView单击.长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类 我写的附录文章2,介绍了Android如何基于OnItemTouchListener +GestureDetector实现单击.长按事件的监听,由于如今RecyclerView在Android开发是如此的普遍,以及RecyclerView的单击事件是如此的常用,如果像附录文章2那样把一堆事件监听写到业务逻辑代码里面,那得写

【C语言学习】封装和模块化思想

刚学习完C后,做的关于C的课程设计是在一个源文件中放了几百行代码,而且各个功能之间都是相互依赖的,这样就会很麻烦.因为当我要修改某个地方的时候,就会牵连着要修改喝多的地方.而在实际的程序设计中,这也是不可取的.因此,模块化和封装的思想就显得很重要了!!! ★static变量 static变量的一个显著的作用就是可以实现一个模块的封装. static存储类别的特性决定了static声明的全局变量只能被本源文件的函数引用.当在一个源文件中定义一个static全局变量后,其他文件就不能通过使用"ext

实体类作用、封装与面向对象思想

实体类体现了面向对象的原则,将一切数据封装成对象,一切都是对象. 函数的请求参量.存贮领域模型的对象.页面展示的数据等等. 实体类就是一个载体,是一个数据结构,实现了对数据的封装. 实体类的存在便利了数据的传输.处理.展示.存贮. 在传输过程中,最主要的作用就是简化接口,保证接口稳定性. http://blog.csdn.net/yangyuankp/article/details/7880943 一.为什么要用实体类? |  使程序简洁易懂,便于维护. |  暗合接口不变原则. |  体现面向

HUST 1698 - 电影院 组合数学 + 分类思想

http://acm.hust.edu.cn/problem/show/1698 题目就是要把一个数n分成4段,其中中间两段一定要是奇数. 问有多少种情况. 分类, 奇数 + 奇数 + 奇数 + 奇数 奇数 + 奇数 + 奇数 + 偶数 偶数 + 奇数 + 奇数 + 奇数 偶数 + 奇数 + 奇数 + 偶数 然后奇数表达成 2 * a - 1这个样子,就能列出方程. 然后就是类似于解a1 + a2 + a3 + a4 = x的问题了. #include <cstdio> #include &l

AFN的简单封装抽取工具类

?AFN获取数据----by hanfeng AFN是对 NSURLConnection,NSURLSession的封装 AFNetworking3.0删除了了对 NSURLConnection的封装内容 这是因为,NSURLSession能够完全替代NSURLConnection,并且具有很多优点 支持后台运行的网络任务 暂停.停止.重启网络任务,不需要自己封装NSOperation 支持断点续传,异步下载 支持上传,异步上传 获取下载.上传的进度 NSURLSession有3种任务 NSUR

封装一个tab思想方法实现点击的时候显示或隐藏效果

代码实现: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> tab方法 </TITLE> <meta charset="utf-8" /> <script src="jquery-1.11.3.min.js"></script> &

浅谈android中的自定义封装易用的Dialog

好久没写android的博客,最近在做一个android的项目,里面用到我们经常用的一个控件就是对话框,大家都知道android自带的对话框是很丑的,android5.x之后除外.所以就出现了自定义view,自己定义美观的对话框.好我们就来自定义对话框. 整体思路:定义一个类然后去继承Dialog类,然后重写相应的构造器方法.大家都知道一般的对话框的创建过程都是来一个AlertDialog.Builder对象,然后使用一些set方法来设置标题内容以及设置一些自定义的view和点击的Button以

编程思想、哲学、道与术

一切的起源:问题及问题的求解: 编程是为了解决问题,而解决问题可以有多种视角和思路: 世界观与方法论: 马克思:世界是物质的,物质是运动的:运动着的物质是普遍联系和永恒发展的: 编程思想与世界观: 我们知道,哲学领域中,最根本的对立是唯物主义和唯心主义的对立,而附属其下,又有许多对立,如形而上学和辩证法的对立.可知论和不可知论的对立等等.这些对立形成了哲学的基本体系.派别和出发点.实际上,这些对立,都是世界观的对立.世界观,简而言之即如何看待这个世界.世界观是一切哲学问题的本源和出发点. 同样,

swift项目第六天:中间发布按钮的封装以及监听点击事件

import UIKit /* 总结:1:给UIButton写分类,新建文件swiftFile,一般为了区分起名字都是名字-Extension,要想调用UI控件需要导入 import UIKit框架,然后给系统的类写分类:extension UIButton {},提供类方法或是构造函数的方法,把与该控件有关的业务逻辑全封装在分类的内部.2:封装方法:类方法:都是以class开头,class func 函数名(参数)->返回值类型{业务逻辑代码,return 返回值}:例子: class fun