自定义UI的基本结构

自定义UI的基本结构

  • .h文件
@protocol TRIPHotelXXXViewDelegate <NSObject>
- ( void )actionA;
@end
 
@interface TRIPHotelXXXView : UIView
 
@property (nonatomic,weak) id <TRIPHotelXXXViewDelegate> delegate;
+ (instancetype)xxxView:(NSDictionary *)info width:(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 width:(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. 结构清晰

转载于:https://www.cnblogs.com/ranger-jlu/p/4872708.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值