zoukankan      html  css  js  c++  java
  • 封装.抽取分类思想

    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;

  • 相关阅读:
    [Vue warn]: Error in render: "TypeError: Cannot read property '0' of undefined、vuejs路由使用的问题Error in render function
    web 实时通信的方法总结
    SVN相关
    Redis__WindowsServer主从服务部署及调用实例
    Sqlserver__数据表排序记录和界面显示排序记录不一致的问题
    redis_常见问题
    redis_常用命令
    电商项目系列文档(二)
    redis配置文件redis.conf参数说明
    CMD_命令行
  • 原文地址:https://www.cnblogs.com/xiaotian666/p/5724576.html
Copyright © 2011-2022 走看看