UI与数据分离 与 UI的演进

解藕的好处:UI内部模块能够灵活的变化。

MVC或者三层架构着重强调了数据、业务逻辑和UI的分离。

(MVC中的C只是UI和业务逻辑模块间的一个中转组件,理论上应该是个轻模块。)

以前的关注的解藕技术比耦合多;重点强调了现实与数据、业务逻辑的解藕;现实与数据的耦合则很少关注。

UI展示的主要工作:内容、样式、布局。

视图的分类:

简单视图:单一信息源视图;uilabel、uiiamgeview

符合视图:数据源为结构体;

数据源类型:

可配置;

不可配置;

UI布局的定制需求:需要开放接口给外面。

View开发定式:

1)配置子视图;loadSbuviews configSubviews

2)配置布局;  自动布局  layoutsubviews;

3)配置数据;      loadDatas; 如果使用自动布局,配置数据后不用进行二次布局;否则需要二次布局。

数据配置与在MVC中的位置。

数据配置接口是视图层与业务逻辑层的接口。

理论上只有与业务逻辑有关的视图需要有这个接口。

UI的大部分功能还是信息展示和用户交互。

系统UI的支持(UIView):

事件处理:UIView : UIResponder

视图布局UIView(UIViewGeometry)

UIView (UIConstraintBasedLayoutCoreMethods)

视图组合:UIView(UIViewHierarchy)

视图样式(渲染):(UIViewRendering)

系统UI的数据接口支持(uilabel):

数据: @property(nullable, nonatomic,copy)   NSString           *text;

样式: @property(null_resettable, nonatomic,strong) UIFont      *font;

@property(null_resettable, nonatomic,strong) UIColor     *textColor;

@property(nullable, nonatomic,strong) UIColor            *shadowColor;

@property(nonatomic)        CGSize             shadowOffset;

MVC中的C:主要工作是UI导航。

https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/CreatingViews.html#//apple_ref/doc/uid/TP40009503-CH5-SW6

Checklist for Implementing a Custom View

The job of a custom view is to present content and manage interactions with that content. The successful implementation of a custom view involves more than just drawing and handling events, though. The following checklist includes the more important methods you can override (and behaviors you can provide) when implementing a custom view:

  • Define the appropriate initialization methods for your view:
    • For views you plan to create programmatically, override the initWithFrame: method or define a custom initialization method.
    • For views you plan to load from nib files, override the initWithCoder: method. Use this method to initialize your view and put it into a known state.
  • Implement a dealloc method to handle the cleanup of any custom data.
  • To handle any custom drawing, override the drawRect: method and do your drawing there.
  • Set the autoresizingMask property of the view to define its autoresizing behavior.
  • If your view class manages one or more integral subviews, do the following:
    • Create those subviews during your view’s initialization sequence.
    • Set the autoresizingMask property of each subview at creation time.
    • If your subviews require custom layout, override the layoutSubviews method and implement your layout code there.

https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/CreatingViews.html#//apple_ref/doc/uid/TP40009503-CH5-SW6

Views

Because view objects are the main way your application interacts with the user, they have many responsibilities. Here are just a few:

  • Layout and subview management
    • A view defines its own default resizing behaviors in relation to its parent view.
    • A view can manage a list of subviews.
    • A view can override the size and position of its subviews as needed.
    • A view can convert points in its coordinate system to the coordinate systems of other views or the window.
  • Drawing and animation
    • A view draws content in its rectangular area.
    • Some view properties can be animated to new values.
  • Event handling
    • A view can receive touch events.
    • A view participates in the responder chain.

This chapter focuses on the steps for creating, managing, and drawing views and for handling the layout and management of view hierarchies. For information about how to handle touch events (and other events) in your views, see Event Handling Guide for UIKit Apps.

时间: 2024-10-29 19:07:01

UI与数据分离 与 UI的演进的相关文章

Android实战开发租赁管理软件(适配UI,数据的存储,多线程下载)课程分享

亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系. 课程内容简单介绍 我们软件是基于移动设备的.所以我们必定的选择了安卓作为我们的开发工具.课程中,我们将简要的介绍Android的基本概念,然后进行我们的实战开发.在开发中,大家讲学习到主要的组件,适配UI,数据的存储,多线程下载,开机广播,闹钟提醒,短信发送等实际项目开发中碰到的实用的知识点.通过课程学习,让大家可以掌握Android软件开发的流程,注意点,及优化.帮助大家迅速的掌握An

学习IOS开发UI篇--数据存储

iOS应用数据存储的常用方式 1.lXML属性列表(plist)归档 2.lPreference(偏好设置) 3.lNSKeyedArchiver归档(NSCoding) 4.lSQLite3 5.lCore Data Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录.例如,游戏应用可将游戏存档保存在该目录 tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除.应用没有运行时,系统也可能会清除该目录下的文件.iTunes同步设备时

个人心得:UI既数据

这两天在做个图形方面的小程序,UI设计简直烦透我了.可能是受到设计模式的影响,之前也一直是这样,总想着“耦合”什么的,结果我把程序数据.程序部件和UI部分的关系搞成如下了: 其中数据部分作为中间部分牵一发而动全身,其他所有部分都要考虑进去,把我绕的头晕目眩. 比如UI上有个数值变化了,那就好玩了,首先数据部分要变,接着通知其他部分 --- A.B.C都要变 再比如程序部件A改变了其中某个数据部分的某个数据,那么数据部分要变.UI要变,同时还要通知BC……,看似简单,实则繁琐 还有,其实这也应该可

Liger UI 表格数据查找/通过条件加载数据

api上的例子是在本地过滤的,无法使用,自己摸索了一下. javascript代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 //初始化ligerui控件 $(function (){         maingrid = $("#maingrid").ligerGrid({             columns: [                 {

IOS开发UI基础--数据刷新

IOS开发UI基础--数据刷新 cell的数据刷新包含以下几个方面 添加数据 删除数据 更改数据 全局刷新方法(最常用) [self.tableView reloadData]; // 屏幕上的所有可视的cell都会刷新一遍 局部刷新方法 添加数据 NSArray *indexPaths = @[ [NSIndexPath indexPathForRow:0 inSection:0], [NSIndexPath indexPathForRow:1 inSection:0] ]; [self.ta

kendo ui 编辑数据点击取消grid数据减少原因及处理方案

kendo ui编辑数据点击取消按钮grid数据减少的,造成的原因是grid编辑完一条数据会去datasorce中data数组中查找是否存在该数据,如果存在就不添加,不存在就添加. 先做一个例子: html代码: <div id="smsReceivesGird" style="width: 500px;"></div> js代码: <pre name="code" class="html">

表现和数据分离的好处

http://www.cnblogs.com/yexiaochai/p/3167465.html 1.界面与数据的分离,必须体现在代码上,界面的代码归界面的代码,数据的代码归数据的代码,两者必须泾渭分明. 2.当界面需求发生改变,只需要改写界面的代码,并且所改写的代码不能影响到数据访问的代码. 只有做到这两者才算界面与数据分离.叶小钗同学让我上代码,趁今天还不是很忙,写下了下面的代码: <!DOCTYPE html> <html lang="en"> <h

JSON解析 实现界面 数据分离.

JSON 作为一种轻量级的数据交换格式,正在逐步取代XML,成为网络数据的通用格式 基于JavaScript的一个子集 易读性略差,编码手写难度大,数据量小 JSON格式取代了XML给网络传输带来了很大的便利,但是却没有了XML的一目了然,尤其是JSON数据很长的时候,我们会陷入繁琐复杂的数据节点查找中 JSON格式说明 对象 {} 格式 {key : value, key : value,...} 的键值对的结构 可以反序列化为OC中的NSDictionary 数组 [] 格式 ["java&

IOS基础UI之(三)手写UI和storyboard方式实现图片移动和缩放

手写UI是最早进行UI界面布局的方法,优点是灵活自由,缺点是使代码看起来比较长.平时学习的时候可以多尝试手写ui,这样会更深入熟悉控件.storyboard开发效率相对比较高.实际开发中看情况而定!! 下面用这两种方式分别实现图片移动和缩放. 功能描述: 1. 界面布局 2.点击相应的按钮,对显示的图片移动.缩放. 效果如下:    掌握点: 一:熟悉代码的描述UIButton属性 1.UIButton状态 UIControlStateNormal          // 正常状态 UICont