zoukankan      html  css  js  c++  java
  • 自定义UI的基本结构

    自定义UI的基本结构

    • .h文件
    @protocol TRIPHotelXXXViewDelegate <NSObject>
    - (void)actionA;
    @end
     
    @interface TRIPHotelXXXView : UIView
     
    @property (nonatomic,weak) id <TRIPHotelXXXViewDelegate> delegate;
    + (instancetype)xxxView:(NSDictionary *)info (CGFloat)width;
    @end
    • .m文件
    @implementation TRIPHotelXXXView{
        //  类变量
    }
     
    - (void)dealloc{
        //  内存释放
        SafeSuperDealloc(super);
    }
     
    - (id)initWithFrame:(CGRect)frame{
        self = [super initWithFrame:frame];
         
        if (self) {
            //  变量初始化
        }
         
        return self;
    }
     
    - (void)layoutSubviews{
        [super layoutSubviews];
         
        CGFloat y = 0.0;
     
        // 子View的布局,y动态调整
     
        // 更新自定义UI的高度
        CGRect rect = self.frame;
        rect.size.height = y;
        self.frame = rect;
    }
     
    + (instancetype)xxxView:(NSDictionary *)info (CGFloat)width;{
        // 用view的数据及父view的宽度定义并初始化一个UI
        TRIPHotelXXXView *view = [[TRIPHotelXXXView alloc] initWithFrame:CGRectMake(0, 0, width, 0)];
        [view updateViewWithInfo:info];
     
        return view;
    }
     
    - (void)updateViewWithInfo:(NSDictionary *)info{
        // view本身的数据填充
     
        // 重新布局子View
        [self layoutSubviews];
    }
     
    #pragma mark - Action
    - (void)onSomeActionHappened:(id)sender{
        if (_delegate && [_delegate respondsToSelector:@selector(actionA)]) {
            [_delegate actionA];
        }
    }

    结构分析

    1. 数据准备好之前view已从原父view移除,并置为nil,之后进行UI的定义、初始化、添加到父view
    2. 必要之时,可将updateViewWithInfo:方法作为外部接口,在数据更新后也更新view的布局
    3. 自定义view由众多子view组成,高度动态调整,但也可以在初始化的时候置为定值,然后在固定高度的view中布局子view
    4. 可扩展性较强,可随时更具需求调整子view及布局
    5. 向外部提供delegate接口,根据业务在外部执行相应的动作
    6. 结构清晰
  • 相关阅读:
    算法刷题训练(2020.10.6)
    使用Gitee作为图片仓库,博客园引入图片【2020.10.3】
    阿里云DevOps助理工程师认证学习笔记:敏捷项目管理+需求分析【2020.10.2 10.3】
    算法刷题训练(2020.9.30)
    爬取百度贴吧数据(练习Python爬虫)
    算法刷题训练(2020.9.29)
    算法刷题训练(2020.9.28)
    软件测试:软件开发模型和软件测试模型
    计算机组成原理练习题(有助于理解概念)
    wamp环境下Wordpress的安装
  • 原文地址:https://www.cnblogs.com/ranger-jlu/p/4872708.html
Copyright © 2011-2022 走看看