一个功能强大的基于jQuery的grid控件SlickGrid的自定义单元格编辑器对象接口的详细定义:(翻译自http://wiki.github.com/mleibman/SlickGrid/writing-custom-cell-editors)
基本接口
function IEditor(args) {
// 参数args有如下成员:
// container: 待编辑的cell容器
// item: 待编辑的row数据项
// 执行一些代码来初始化UI
this.destroy = function() {
// 删除constructor(就是IEditor本身)创建的任何数据、事件、DOM元素
};
this.focus = function() {
// 如果可能,将焦点移动到主编辑控件上
};
this.isValueChanged = function() {
// 如果编辑控件改变了内容则return true否则返回false
};
this.serializeValue = function() {
// 返回编辑内容的序列化形式可以
// 是任何对象但必须是简单对象,就是说即使本对象被销毁后依然可以被传递出去
};
this.loadValue = function(item) {
// 向编辑控件装入值并更新UI
// 本方法可能在编辑器初始化后立即调用
// 还可能在通过grid.updateRow/updateCell改变正在编辑的row/cell时调用
};
this.applyValue = function(item,state) {
// 将存在state中的序列化形式的内容反序列化到item中
// 本方法可能在编辑器对象(IEditor)被销毁后调用所以这个必须是一个类似Java/C#/C++的static方法
// 也就是说本方法执行时不能访问任何实例变量
};
this.validate = function() {
// 验证用户的输入, 如果验证通过则返回{valid:true,msg:null}, 否则
return { valid: false, msg: "验证出错信息" };
};
this.hide = function() {
// 如果实现了本方法,当正被编辑的cell被卷滚出view时将会被调用
// 如果你的UI不是在cell中或者你需要打开其它辅助控件(比如日历或者日期选择控件)时你可能需要实现这个
};
this.show = function() {
// 和hide正好相反的作用
};
this.position = function(cellBox) {
// 如果实现了本方法, 当cell容器滚动或者正在编辑的cell的绝对位置发生变化时会被调用
// 如果你的UI作为document BODY的一部分被构造,可能你需要实现这个方法以便当cell位置变化时更新你的UI
// 参数cellBox: { top, left, bottom, right, width, height, visible }
};
}
复合编辑器
在绝大多数情况下,Cell(单元格)和数据项的字段应该是1:1的关系。但有时候,为了提高可用性,你可能需要将多个字段放到一个单元格中编辑。可以定制一个formatter将多个字段的内容组合到一个单元格中显示。SlickGrid通过调用定制编辑器对象接口的loadValue(从字段到编辑控件)、serializeValue(从编辑控件到序列化形式)以及applyValue(从序列化形式到字段)方法的方式很容易实现多个字段在一个单元格中编辑的UI。尽管这里有三个方法比getValue/SetValue这样仅需两个方法要稍微复杂点,但是后者无法实现前述的多字段复合编辑器。
例子参见http://mleibman.github.com/SlickGrid/examples/example3a-compound-editors.html
介入单元格编辑过程
你可以轻易地钩住onCellChange事件以便当单元格被编辑改变后运行一些代码。你还可以通过grid.options的editCommandHander选项来设定一个定制的处理器来介入单元格编辑过程,然后你就可以完全控制如何以及何时提交编辑的内容。由于applyValue()和serializeValue()互不相关,你甚至能在提交修改后撤消这些修改。
这个特性当你编辑远程数据时尤其有用:你可以通过一个ajax调用来应用这些修改并在其错误处理代码中撤消这些修改,这样当服务器端无法保存修改时仍然保持数据的同步。你还可以将这些编辑命令存在一个队列中,然后用很少的一点代码实现undo/redo。
当编辑器的destropy()调用后将调用editCommandHandler,传递的参数有数据项、单元格的列定义以及编辑命令:
function editCommandHandler(item,column,editCommand) {}
编辑命令对象有如下属性和方法:
-
row
: 被编辑的单元格行号
-
cell
: 被编辑的单元格列号
-
editor
: 对编辑器接口对象的引用
-
serializedValue
: 编辑结果的序列化形式,就是当destroy编辑器对象后对editor.serializeValue()的调用结果
-
prevSerializedValue
: 用户修改以前调用editor.serializeValue()得到的序列化形式
-
execute()
: 调用本方法会在editor对象上调用editor.applyValue(item,serializedValue)保存修改到数据项
-
undo()
: 调用本方法会调用editor.applyValue(item,prevSerializedValue)恢复数据项到未修改前
实现了undo的例子参见:http://mleibman.github.com/SlickGrid/examples/example3b-editing-with-undo.html
分享到:
相关推荐
dhtmlxgrid自定义CELL编辑事件 dhtmlxgrid是一个功能强大的网格控件,提供了丰富的编辑功能,包括自定义CELL编辑事件。在本篇文章中,我们将详细介绍如何自定义dhtmlxgrid的CELL编辑事件,实现自定义的编辑控件。 ...
3. 通过 storyboard 或代码注册这个自定义Cell类到UITableView,确保在`viewDidLoad()`中调用`tableView.register(UINib(nibName: "CustomTableViewCell", bundle: nil), forCellReuseIdentifier: "CustomCell")`或`...
总之,自定义融云会话列表需要结合融云SDK的API与iOS的UITableView机制,通过自定义Cell实现界面的个性化。这个过程中,良好的代码结构、性能优化以及用户体验设计都是至关重要的。通过不断的实践和迭代,我们可以...
在iOS开发中,自定义Cell是一项常见的任务,它允许开发者根据特定需求设计并展示复杂的UI元素,提升用户体验。本文将深入探讨如何在iOS项目中实现自定义Cell,并结合“图文混排”这一特性来增强界面的视觉效果。 ...
在iOS开发中,`UICollectionViewController`是一种专用于展示`UICollectionView`的控制器,它扩展了`UIViewController`,提供了更方便的接口来管理集合视图的数据和布局。在Xcode 6.1及更高版本中,我们可以利用...
为了确保手势识别器不与表格视图的默认滑动行为冲突,我们需要在UITableViewDelegate的`tableView(_:shouldBeginEditingRowAt:)`方法中返回`false`,阻止cell的编辑模式启动。同时,在手势识别器的代理方法中,当...
本项目包含两个示例,旨在演示如何高效地使用`UITableView`,包括基本用法、自定义Cell以及页面跳转和本地存储的实现。 首先,简单的`UITableView`使用涉及到以下几个关键知识点: 1. **初始化UITableView**:在 ...
在iOS应用开发中,自定义`UITableViewCell`,也就是我们常说的自定义Cell,是一个非常常见的需求。这通常涉及到UI设计的个性化以及数据展示的复杂性。这个“自定义Cell.zip”压缩包提供了一个完整的iOS应用实例,...
标题"ios-自定义cell编辑状态,全选.zip"指的是一个关于如何在iOS应用中实现自定义编辑模式,包括全选和单选功能的项目实例。这个压缩包可能包含了一个或多个源代码文件,用于演示这一功能的实现。 首先,我们要理解...
自定义的三中创建cell的方式,文本加代码,瞬间掌握创建cell的方法。
这个压缩包中的“自定义Cell”文件可能包含了实现上述功能的源代码,可以作为学习和参考的对象。通过研究这个实例,开发者能够掌握自定义Cell的基本流程和技巧,进一步提升iOS应用的界面设计能力。
5. 事件处理:如果自定义Cell需要响应用户的触摸或者其他事件,可以为Cell的UI元素添加手势识别器,或者在Cell类中添加相应的动作方法。 三、自定义Cell的高级技巧 1. 布局管理:使用AutoLayout进行动态布局,可以...
5. **处理滑动手势**:如果需要自定义滑动手势的行为,可以添加手势识别器(UIPanGestureRecognizer)到cell,并在手势触发时调整滑动视图的显示状态。 完成以上步骤后,你就可以在UITableView中看到具有多个自定义...
标题“iOS自定义cell侧滑删除、编辑等按钮”所提及的就是这种效果的实现方法。这里主要涉及的知识点包括UITableView的自定义行为、手势识别以及第三方库的使用。 首先,iOS原生的UITableView并不直接提供侧滑显示...
本文将深入探讨如何实现一个自定义的团购cell,并基于标题“iOS团购自定义cell代码”和描述“源代码是最基本的一个例子”,我们将讲解这个基本案例的核心概念和技术。 首先,`UITableViewCell`是iOS中用于显示...
在iOS应用开发中,自定义Cell是提升用户体验和界面美观度的重要手段。本文将深入探讨如何在iOS项目中实现自定义Cell,以提高应用的可定制性和交互性。标题“ios应用源码之自定义cell 20181210”表明我们将围绕2018年...
在iOS开发中,自定义cell侧滑删除是一种常见的交互方式,它使得用户能够方便地对列表中的项目进行删除操作,而无需进入详情页面或者通过其他复杂的步骤。这种功能在诸如邮件应用、联系人应用等中广泛应用。下面我们...
XIB(XML Interface Builder)文件是一种用于设计用户界面的图形工具,可以让我们更直观地创建和配置自定义Cell。本教程将深入讲解如何使用XIB来实现自定义Cell。 首先,我们需要创建一个新的XIB文件。在Xcode中,...
2. 自定义Cell的intrinsicContentSize:在自定义Cell的子视图中,设置其约束并计算出intrinsicContentSize,然后在Cell的layoutSubviews方法中更新frame。 ```swift override func layoutSubviews() { super....
在Swift编程中,创建自定义Cell是iOS应用开发中的常见任务,特别是在构建功能丰富的界面,如通讯录应用时。这个"04-Swift通讯录实战自定义Cell.zip"文件很可能是包含一个教程或示例代码,用于演示如何在Swift中实现...