自定义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. 结构清晰
时间: 2024-10-13 12:33:15

自定义UI的基本结构的相关文章

android自定义UI模板图文详解

不知道大家在实际开发中有没有自定义过UI模板?今天花时间研究了一下android中自定义UI模板,与大家分享一下. 每个设计良好的App都是自定义标题栏,在自定义标题栏的过程中大部分人可能都是自定义一个标题的xml文件,然后在需要的地方直接通过include来引用,这比起在每个布局文件中写标题栏已经进化很多了,但仍然不是最简单有效的方法,我们为什么不能自定义一个标题控件呢?今天就带大家自己做一个标题栏控件.效果图如下: 开始啦: 第一步:自定义xml属性 新建一个android项目,在value

Android 自定义UI圆角按钮

Android实际开发中我们一般需要圆角的按钮,一般情况下我们可以让美工做出来相应的按钮图片,然后放上去即可,另外我们可以在布局文件中直接设置,也可以达到一样的效果.下面讲解在布局文件中自定义圆角按钮的小Demo. 代码很简单,实现效果图: 源代码: 源代码: 这里主要是xml布局文件实现: MainActivity: package com.android_drawableresource; import android.app.Activity; import android.os.Bund

Atitit. .net c# web 跟客户端winform 的ui控件结构比较

Atitit. .net c# web 跟客户端winform 的ui控件结构比较 .net   4.5 webform Winform 命名空间 System.Web.UI.WebControls System.Windows.Forms 命名空间 继承层次结构 System.Object System.Web.UI.Control System.Web.UI.WebControls.WebControl System.Web.UI.WebControls.Button 继承层次结构 Syst

常规功能和模块自定义系统 (cfcmms)—007Extjs的配置文件和自定义ui

常规功能和模块自定义系统 (cfcmms)-007Extjs的配置文件和自定义ui 一.在自动生成的项目中,文件 app.json 是整个前台系统的配置文件,可以在里面增加或修改配置参数来完成相应的功能.该文件的部分参数如下: { "name": "cfcmms", //项目命名空间 "version": "1.0.0.0", //项目版本号 "indexHtmlPath": "index.htm

Android自定义UI控件(简单方便版,但不灵活)

这种方法的优点就是简单,容易理解,适合开发一些不经常用到的自定义UI控件 缺点就是比较不灵活,如果其他应用想使用这个控件的话得改很多 简单来说,这个方法是用来做成品的,下一篇的方法是用来做模板的. 先看成品,这是一个标题栏控件: 由左右两个按钮和中一个TextView组成: 实现方法: 第一步:定义一个xml文件,用来设计你自定义控件的雏形 示例代码:文件名为title 1 <?xml version="1.0" encoding="utf-8"?> 2

Android UI开源组件库BottomView ,第三方自定义UI控件

这里分享一个Android的非常经典实用而且简单方便的第三方UI控件库:BottomView(小米的米UI也用到了这个) 实现功能: 可以在底部弹出的View里自定义布局: 可以自定义是否可以触摸外部消失: 可以自定义事件: 可以自定义外围背景是否透明: 可以自定义动画: 如果需要的话,可以强制为顶部View显示 BottomView.jar库文件下载地址:http://download.csdn.net/detail/jay100500/7547055 BottomView的Demo下载地址:

NGUI创建Camera参数为Simple 2D的UI UI对象的结构UI Root(2D)

NGUI创建Camera参数为Simple 2D的UI UI对象的结构UI Root(2D) 使用NGUI创建的Camera参数为Simple 2D的UI,会在游戏的场景中生成1个名为UI Root(2D)的游戏对象,且此对象下还包含了3个其它对象:Camera.Anchor和Panel,如图1-4所示.本小节会分别介绍这4个游戏对象本文选自NGUI从入门到实战. 图1-4  在Hierarchy视图里查看新创建的UI游戏对象 1.4.1  UI Root(2D) 此游戏对象将负责控制UI控件的

cocos2d-js 3.0 rc2 自定义UI控件组件 例子:能播放动画的MenuItem。MenuItemSprite的bug

其实总体自定义UI组件都比较简单,尤其是cocos2d-js是开源的,如果有什么不明白的直接看js代码或者C++代码即可.当然js代码基本就够了. 另外,js的ctor函数虽然说是构造函数,但毕竟不是flash或者c++的构造函数,这只是一个普通函数,也就是说可以不在第一行默认调用,这就给扩展带来了不少方便. 现在想做一个声音按钮,点一下能关闭音乐,再点一下又能打开.当然就是MenuItemToggle了. 但想做得再炫一点,有声音的时候,按钮的样子能有几个音波的变化.那么就需要用MenuIte

Android自定义UI陷阱:LayoutInflater.from().inflate()一定不能工作在父类或虚类里

问题背景:有一些UI具有共性,比如常见的app第一次运行时出现的各种指示框,告诉你往哪搓是调音量的,往哪点是调屏幕亮度的,当点击这些VIew,则其自动消失.或者一动时间后,自动消失.另外一个问题是,不同的方向下加载出来的指示View内容是不一样的. 为此需要将这些特点的View抽象出来,写个父类或者说是基类,为啥一定要这样搞,这样写好处很多.优点如下: 1.可以让代码变得更简洁.每个子View里的共同的方法都由父类来做,每个子View实现自己的逻辑就ok了. 2.因为这些View只工作一次,所以