zoukankan      html  css  js  c++  java
  • View的封装

    自定义View

    • 通常当一个view内部的子控件比较多,我们一般会考虑自定义一个view,在它的内部将子控件的创建屏蔽起来,这样外界就不用关心具体如何实现,只要导入这个类的.h文件使用就好了

    • 注意一个控件有2种创建方式:

    • 通过代码创建:

      • 初始化时一定会调用initWithFrame:方法
    • 通过xibstoryboard创建:

      • 初始化时不会调用initWithFrame:方法,只会调用initWithCoder:方法
      • 并且在初始化完毕后会调用awakeFromNib方法
    • 在initWithFrame:方法中添加子控件

    // 1.初始化子控件
    -(instancetype)initWithFrame:(CGRect)frame//通过代码创建View时,init会默认调用initWithFrame方法
    {
        if (self = [super initWithFrame:frame]) {
            // 1.初始化一个UIImageView对象
            UIImageView *iconView = [[UIImageView alloc] init];
            [self addSubview:iconView];
            self.iconView = iconView;
            // 2.初始化一个UIlabel对象
            UILabel *titleLabel = [[UILabel alloc] init];
            titleLabel.textAlignment = NSTextAlignmentCenter;
            [self addSubview:titleLabel];
            self.titleLabel = titleLabel;
        }return self;
    }
    
    • 在layoutSubviews方法中设置子控件的frame(一定要调用super的layoutSubviews)
    //2.调整子控件的位置和尺寸
    -(void)layoutSubviews
    {
        // 1.调用父类的layoutSubviews(重要)
        [super layoutSubviews];
        // 2.取出当前控件的宽度和高度
        CGFloat width = self.frame.size.width;
        CGFloat height = self.frame.size.height;
        // 3.调整子控件的位置和尺寸
        // 3.1.调整iconView的位置和尺寸
        self.iconView.frame = CGRectMake(0, 0, width, width);
        // 3.2.调整titleLabel的位置和尺寸
        self.titleLabel.frame = CGRectMake(0, width, width, height - width);
    }
    
  • 相关阅读:
    SQL创建索引
    SQLServer最耗资源时间的SQL语句
    C# Linq删除父级的同时删除子级
    C# 根据类名创建类的实例对象
    C#利用反射实现两个类的对象之间相同属性的值的复制
    linq时间筛选以及list时间筛选
    为什么watch机制不是银弹?
    我们的前端模版引擎更新总结
    小矮人Javascript模块加载器
    Javascript模版引擎简介
  • 原文地址:https://www.cnblogs.com/ShaRuru/p/5027721.html
Copyright © 2011-2022 走看看