OKit 1.0.4

OKit 1.0.4

Oliver Klemenz 维护。



OKit 1.0.4

  • 作者
  • Oliver Klemenz

OKit

适用于 Swift 的简单易用的应用程序框架,用于通过 (几乎) 无代码创建基于模型和 storyboards 的应用程序。

核心功能

  • 模型和实体
  • JSON 存储(文件,http)
  • 部分(分割)
  • 引用
  • 复杂绑定
  • 失效
  • 数据和图像(包括内联)
  • 加密
  • 应用程序外壳
  • 滑动菜单
  • 设置
  • 面容识别
  • 保护 + 超时
  • 主题(包括暗黑主题)
  • 备份(加密)
  • 帮助视图
  • 复用单元格
  • 自动密钥生成

核心技术

  • Storyboard:应用程序流程使用 storyboards 和模型控制器、模型控制进行设计
  • 模型:模型被命名为数据对象,并继承自 Model
  • 模型实体:模型实体是模型的一部分,并继承自 ModelEntity
  • Codable:模型和模型实体将自动(反)序列化为 Codable 协议
  • Context:模型和模型实体可以用于模型控制器和模型控制中的上下文
  • Binding:模型控制器和模型控制的属性可以绑定到模型绑定路径
  • KVC:使用 @objc 注解更新模型对象时,使用键值编码
  • Controller:模型控制器已启用绑定,并继承自 ModelListTableControllerModelDetailTableController 或其子类
  • Control:模型控制和模型单元格已启用绑定,其中后者继承自 ModelTableCell 或其子类
  • Inspectable:模型控制器和模型控制已扩展为具有 @IBInspectable 属性,在 Interface Builder 中可维护

用法

安装:CocoaPods

OKit 通过 CocoaPods 提供。要安装它,请将以下行添加到您的 Podfile 中

  use_frameworks!
  pod 'OKit'

参考示例:书店

完整的OKit示例项目书店可供获取,展示了OKit框架的所有功能。

OKit Demo Bookshop

模型

模型定义

模型定义基于Swift类,继承自Model,可能包括继承自ModelEntity的嵌套实体。模型隐式地也是一个(根)模型实体,并继承了所有绑定功能。

以下模型类型存在:

  • Model:模型以JSON格式读取/存储到文件系统中的文档目录的okit/data文件夹中,使用模型名和.json扩展名。
  • ModelTransient:模型不读取/存储(因此使用临时处理)。
  • ModelEncrypted:模型以加密的二进制格式读取/存储到文件系统中的文档目录的okit/data文件夹中,使用模型名和.json扩展名。
  • ModelHttp:模型以JSON格式通过HTTP配置的端点读取/存储(端点URL可以通过在Info.plist中配置密钥OKitModelEndpointUrl进行配置)。
  • ModelEncryptedHttp:模型以加密的二进制格式通过HTTP到配置的端点读取/存储(端点URL可以通过在Info.plist中配置密钥OKitModelEndpointUrl进行配置)。

示例

@objc(Shop)
class Shop: Model, Codable {
    var id: String!
    var books: [Book] = []
}

@objc(Book)
class Book: ModelEntity, Codable {
    var id: String!
    var name: String = ""
    var date: Date = Date()
    var marked: Bool = false
    var icon: ModelImage?
    var authors: [Author] = []
}

@objc(Author)
class Author: ModelEntity, Codable {
    var id: String!
    var name: String = "<New Author>"
}

解释

  • 为了允许由模型控制器在Swift中进行动态实例化和键值观察(KVO)以支持绑定,应使用@objc关键字。
  • 必须遵循Codable协议,以便将模型和模型实体反序列化为JSON。
  • 使用Codable协议进行自动JSON反序列化对于继承的属性不起作用,需要手动使用EncoderDecoder协议处理。
  • 属性var id: String!将由框架自动填充UUID,且对于支持模型实体的引用是必需的。

模型注册

模型可以通过Model类和一个可选的名称进行注册。

Model.initialize(window, secure: true) {
    self.shop = Model.register(Shop.self)
    self.catalog = Model.register(Catalog.self, "catalog")
}

如果省略名称,则该模型将以隐含名称 default 注册为默认模型。注册应在 AppDelegateapplication:didFinishLaunchingWithOptions 中完成。模型实例可以存储在应用程序上下文中以便稍后访问。

存储模型

通过在模型实例上调用 Model.store(...) 来存储模型

Model.store(self.shop)

定义模型状态

为了在状态中一起更新所有模型,需进行以下注册

Model.state() {
    Model.store(self.shop)
    Model.store(self.settings)
}

状态定义应在 AppDelegateapplication:didFinishLaunchingWithOptions 中完成。这支持在加密/非加密持久化之间切换,并启用备份/导入功能。

存储模型状态

可以使用以下方式存储模型状态

Model.storeState()

例如,可以在 AppDelegateapplicationDidEnterBackground 中进行存储。

恢复模型状态

可以使用以下方式恢复模型状态

Model.restoreState()

例如,可以在 AppDelegateapplicationWillEnterForeground 中进行存储。

模型实体

模型实体定义要存储的属性和相应的类型。可遵守 Codable 协议的模型实体可以序列化和反序列化到JSON。
模型实体可以递归包含数组、映射、集合或模型实体的单一引用。支持对模型实体与控制器和控件进行绑定。

模型绑定

可以使用以下绑定定义将UI控制器和UI控件绑定到模型实体(上下文):

类型 语法 示例 描述
常量 # #true String、Bool、Int、Float、Double类型的常量(不能与其他类型组合)
本地化常量 % %xyz 作为本地化字符串键解释的String类型常量
模型 > xyz> 标识模型名称,如果省略则使用默认模型
路径 / x/y 分隔路径段
绝对 / /x/y/z 从模型根开始处理(忽略当前上下文)
相对 / x/y/z 相对于当前上下文进行处理
自身 . /./ 停留在当前上下文
父级 .. /../ 相对于当前上下文遍历父级关系
< 或 ~ /~/ 从当前上下文遍历到根关系(模型)
布尔否定 ! !/xy 在布尔检索的上下文中否定绑定值(仅在绑定前端允许)
引用 $ $xyz 标识一个引用上下文,即字符串值之后的内容,用于使用ref()函数查找目标上下文(模型实体)
函数 fn() xyz() 在当前上下文中执行函数
带参数的函数 fn(...) xyz(/a/b) 在当前上下文中使用参数绑定执行函数
索引 [] xy[0]/z 通过索引访问当前数组上下文
KeyPath .@ [email protected] 根据Swift语言在当前上下文中执行KeyPath表达式
多个 , x/y,/a/b 通过逗号逗号分隔执行多个绑定。在代码中使用getAll()获取绑定结果的数组

一个复杂的绑定示例如下:

m1>/a/$b/../c()/d[1]/e(/a)/[email protected]

要在文本字符串中使用特殊绑定字符,可以先用Unicode表示法来转义这些字符。例如,逗号表示为\u{002c}

扩展函数绑定

可以访问核心数据类型(例如Number、String、Date...)的函数和属性

示例

  • authors.@count/suffixPlural(#entry):使用可翻译且可复数的字符串给@count返回的数字添加后缀。
  • %Price: ,price/round2, %EUR:多部分绑定将货币添加到价格值中
  • name/initial:字符串扩展返回名字的第一个字符
  • date/formatRelativeDate:日期扩展将日期格式化为相对日期

任何Swift/Obj-C类型都可以扩展额外的函数和属性,并在绑定表达式中使用。

模型实体失效

通过绑定或相应的 getsetcall 函数以编程方式更新模型实体将触发一个失效机制(除非指定了 suppressInvalidate)。失效将通知所有已绑定的控制器和控件更新其内容。

模型实体重用

  • ModelRef:重用模型实体以存储实体引用
  • ModelData:重用模型实体以存储任意二进制数据。数据根据模型类型(文件、http、加密、临时)分别存储,并懒加载
  • ModelImage:重用模型实体以存储模型图像。图像数据根据模型类型(文件、http、加密、临时)分别存储,并懒加载
  • ModelInlineData:重用模型实体以存储任意数据。数据直接存储在模型实体 JSON 数据中
  • ModelInlineImage:重用模型实体以存储模型图像。图像数据直接存储在模型实体 JSON 数据中
  • ModelSettings:重用模型实体以存储应用程序模型设置(例如,主题、加密、保护等)

模型实体引用

可以使用模型实体库 ModelRef 来引用模型实体。

示例

@objc(Book)
class Book: ModelEntity, Codable {

    var id: String!
    var name: String = ""
    var author: ModelRef = ModelRef()
    
}

模型实体 Book 通过其键(ID)引用模型实体 Author。因此,Author 并不是作为组合存储,而是在 Book 中存储引用键作为外键。这两个实体必须位于相同的模型实体部分(参见下一节)中,才能能够通过属性 book.author.ref 懒加载地解析引用。

模型实体部分

可以通过继承 ModelPartial 并实现 syncstore 函数来建立模型分区(部分)。

示例

@objc(GroupDefer)
class GroupDefer: ModelPartial, Codable {
    var id: String!
    var name: String = "" {
        didSet {
            group?.name = name
        }
    }
    var group: Group? {
        get {
            return try? retrieve(Group.self)
        }
        set {
            assign(newValue)
        }
    }

    override func sync(entity: ModelEntity) {
        name = (entity as! Group).name
    }

    override func store() {
        try? store(group)
    }
}

@objc(Group)
class Group: ModelEntity, Codable {
    var id: String!
    var name: String = ""
}

实体 Group 在部分 GroupDefer 中通过从不同的 URL 中读取/存储来懒加载地解决。可以使用 syncdidSet 来同步两个实体中可用的属性(例如 name)。通过调用 store 来存储分区数据。

模型实体生命周期钩子

管理钩子

回调函数 managed 可以被覆盖以实现生命周期钩子,当模型实体是上下文的一部分时,即父实体或父实体的集合属性。

open dynamic func managed(_ context: Any? = nil) {
    // ...
}

上下文可以是父实体或父实体的集合。

未管理钩子

回调函数 unmanaged 可以被覆盖以实现生命周期钩子,当模型实体从上下文中移除时。

open dynamic func unmanaged(_ context: Any? = nil) {
    // ...
}

上下文可以是父实体或父实体的集合。

故事板/控制器

使用以下模型类作为自定义类,通过故事板构建用户界面,使用标准 View ControllersTable View Controller

  • ModelListTableController:表示模型实体的列表控制器
  • ModelDetailTableController:表示模型实体的详情控制器
  • ModelSelectionTableController:显示单选或复选模型实体的选择列表控制器
  • ModelApplicationController:表示滑动菜单和保护支持的程序环境
  • ModelMenuTableController:表示滑动菜单容器中可见的菜单控制器
  • ModelSettingsTableController:表示设置控制器,以显示模型设置
  • ModelBackupTableController:表示备份控制器,用于创建和导入备份
  • ModelSecureBackupTableController:表示安全备份控制器,用于创建和导入安全备份

模型控制器定义了 @IBInspectable 属性,这些属性被 Interface Builder 解释,以增强属性的侧边栏。

模型控制器可以继承自 ModelBaseTableController 以获得公共绑定功能。当然,每个模型控制器都可以进一步子类化以实现更多用例特定的功能。

建议使用故事板,也可以编程方式使用模型控制器直接在代码中构建 UI。

故事板标识符

模型单元格

始终使用 model 单元标识符用于在故事板中使用模型类动态原型单元格。

模型转场

始终使用 model 转场标识符在故事板中进行模型表格与模型详细表格之间的转场。

<abstract> 模型基本表格

模型基本表格控制器包含适用于所有模型控制器公共的绑定逻辑等。

以下 @IBInspectable 属性存在于模型表格 ModelBaseTableController

名称 描述 可绑定 上下文 类型  默认值
contextPath 绑定上下文路径  是 控制器 ModelEntity
promptPath 导航提示的绑定路径  是 导航项 字符串
titlePath 导航标题的绑定路径  是 导航项 (Attributed)字符串
titleTap 导航标题点击的绑定路径  是 导航项 函数
titleCount 导航标题计数数字的绑定路径  是 导航项 整型
subTitlePath 导航副标题的绑定路径  是 导航项 (Attributed)字符串
subTitleObject 导航副标题对象名称的绑定路径  是 导航项 字符串
subTitleObjectPlural 导航副标题复数名称的绑定路径  是 导航项 字符串
subTitleSwap 指定标题和副标题是否交换的标志绑定路径  是 导航项 布尔型  #false
编辑 控制编辑按钮可见性的标志绑定路径  是 导航栏 布尔型  #true
editEnabled 控制表格行编辑支持的标志绑定路径  是 表格行 布尔型  #true
editInherit 指定是否从上一个控制器继承编辑状态的标志绑定路径  是 控制器 布尔型  #false
editAlways 指定是否始终启用编辑状态的标志绑定路径  是 控制器 布尔型  #false
帮助 控制帮助按钮可见性的标志绑定路径  是 导航栏 布尔型  #true
forceUpdate 将绑定路径绑定到标志,指定在销毁时表是否更新,尽管修改是从该控制器触发的。  是 控制器 布尔型  #true

模型列表表

模型列表表控制器 ModelListTableController 在表格视图中显示模型实体的列表。

以下 @IBInspectable 属性存在于模型表 ModelListTableController

名称 描述 可绑定 上下文 类型  默认值
类型 将绑定路径绑定到列表类型  否 控制器 字符串
typeName 将绑定路径绑定到列表类型名称  否 控制器 字符串
dataPath 将绑定路径绑定到表数据  是 表格 Array<ModelEntity>,Set<ModelEntity>
rowSort 将绑定路径绑定到属性,表数据按该属性排序 表格 字符串
rowSortAsc 将绑定路径绑定到标志,指定数据是否按升序排序 表格 布尔型  #true
group 将绑定路径绑定到属性,表数据按该属性分组 表格 字符串
groupName 将绑定路径绑定到一个表示组属性可读名称的属性 表格 字符串
groupSort 将绑定路径绑定到一个标志,指定组是否排序 表格 布尔型  #true
groupSortAsc 将绑定路径绑定到一个标志,指定组是否按升序排序 表格 布尔型  #true
reorder  将绑定路径绑定到一个标志,指定是否允许对表格进行重新排序 表格 字符串  #false
reorderEnabled  将绑定路径绑定到一个标志,指定是否允许对表格行进行重新排序 表格行 字符串  #true
tap 将绑定路径绑定到行点击  是 表格行 函数
tapEdit 将绑定路径绑定到编辑模式下的行点击  是 表格行 函数
selectPath 将绑定路径绑定到编辑期间的多个选择事件  是 表格行 函数
refresh 将绑定路径绑定到一个标志,控制刷新控件的可视性  是 表格 布尔型  #true
search 将绑定路径绑定到一个标志,控制搜索栏的可视性  是 搜索栏 布尔型  #true
searchPath 将绑定路径绑定到一个用于在实体中搜索的属性  是 搜索栏 字符串  description
searchFilterPath 将绑定路径绑定到一个用于在实体中过滤的属性  是 搜索栏 字符串  
searchFilters 多部分绑定路径到搜索栏作用域按钮  是 搜索栏 字符串
index 将绑定路径绑定到一个标志,控制A-Z索引的可视性  是 表格 布尔型  #false
add 将绑定路径绑定到一个标志,控制添加按钮的可视性  是 导航栏 布尔型  #true
addAppend 将绑定路径绑定到一个标志,指定新条目是否附加或插入到顶部  是 导航栏 布尔型  #false
addName 如果不为空,它将启用一个“新条目”对话框,其中该属性指定文本字段的标签  否 控制器 字符串
addNav 将绑定路径绑定到一个标志,指定是否触发新创建实体的详细导航  是 控制器 布尔型  #false
navEnabled 将绑定路径绑定到一个标志,指定是否允许对表格行进行导航  是 表格行 布尔型  #true
delete 将绑定路径绑定到一个标志,指定是否允许对表格进行行删除  是 表格 布尔型  #true
deleteEnabled 将绑定路径绑定到一个标志,指定是否允许对表格行进行行删除  是 表格行 布尔型  #true
deletePrompt 将绑定路径绑定到一个标志,控制删除提示对话框的可视性  是 控制器 布尔型  #true
更多 将绑定路径绑定到一个标志,指定行中是否可用的更多按钮  是 表格 布尔型  #false
moreEnabled 将绑定路径绑定到一个标志,指定是否允许行中更多按钮用于表格行  是 表格行 布尔型  #true
moreTap 将绑定路径绑定到更多按钮点击  是 表格行 函数
moreActions 多部分绑定路径到更多操作表动作名称  是 操作表 字符串
moreActionsEnabled 多部分绑定路径到更多操作表动作的启用  是 操作表 布尔型
moreActionsTap 多部分绑定路径到更多操作表动作的点击  是 操作表 函数
quickName 快速动作名称的绑定路径  是 表格 字符串
quickImage 快速动作图像的绑定路径  是 表格 UIImage
quickEnabled 是否启用的标识绑定路径,指定快速动作是否在表格行中启用  是 表格行 布尔型  #true
quickTap 快速按钮点击的绑定路径  是 表格行 函数
autoDeselect 标识绑定的路径,指定点击后是否自动取消选择行  是 表格行 布尔型 #true
forceListUpdate 标识绑定的路径,指定列表表在无效化时更新,即使修改是从此控制器触发的  是 控制器 布尔型  #false
activityTop 活动指示器顶部边距值绑定的路径  是 表格 浮点数  #20.0
activity 活动指示器可见性绑定的路径  是 表格 布尔型  #false

模型详情表

模型详情表控制器 ModelDetailTableController 以表格视图控制器的方式显示一个模型实体的详细信息。

模型表中 ModelDetailTableController 存在以下 @IBInspectable 属性

名称 描述 可绑定 上下文 类型  默认值
sectionHeaders 分区标题的多部分绑定路径  是 表格 字符串  
sectionFooters 分区页脚的多部分绑定路径  是 表格 字符串
tap 将绑定路径绑定到行点击  是 表格行 函数
tapEdit 将绑定路径绑定到编辑模式下的行点击  是 表格行 函数
accyTap 辅助点击绑定路径  是 表格行 函数
accyEditTap 编辑模式中辅助点击的绑定路径  是 表格行 函数
autoDeselect 标识绑定的路径,指定点击后是否自动取消选择行  是 表格行 布尔型 #true
sectionsShowDisplay 控制分区可见性的标志的多部分绑定路径  是 表格 布尔型
sectionsShowEdit 控制编辑模式下分区可见性的标志的多部分绑定路径  是 表格 布尔型

模型选择表(模型列表表)

模型选择表控制器 ModelSelectionTableController 以表格视图控制器的方式显示模型实体列表,用于选择单个或多个模型实体。

模型表中 ModelSelectionTableController 存在以下 @IBInspectable 属性

名称 描述 可绑定 上下文 类型  默认值
refType 选择引用类型绑定的路径  否 控制器 字符串
refTypeName 选择引用类型名称绑定的路径  否 控制器 字符串
selectionContextPath 选择上下文绑定的路径  是 控制器 ModelEntity
selectionPath 选择上下文中的选择引用绑定的路径  是 控制器 ModelRef, Array<ModelRef>, Set<ModelRef>
selectAppend 选择引用是否附加或插入顶部的标志绑定的路径  是 控制器 布尔型 #false
unique 指定是否可以选择相同实体的标志绑定的路径  是 控制器 布尔型 #true
unselect 指定在选择已选实体时是否取消选择的标志绑定的路径  是 控制器 布尔型 #true
clear 指定是否可用清除按钮的标志绑定的路径  是 导航栏 布尔型 #true
close 指定是否可用关闭按钮的标志绑定的路径  是 导航栏 布尔型 #true
autoClose 指定是否选择自动关闭选择表的标志绑定的路径  是 控制器 布尔型 #false

模型应用

模型应用控制器 ModelApplicationController 显示应用环境,包括内容和滑入菜单区域。它显示模型菜单表并根据故事板标识符控制内容显示。

在模型表 ModelApplicationController 中存在以下 @IBInspectable 属性

名称 描述 可绑定 上下文 类型  默认值
storyboardName 默认的故事板名称  否 控制器 字符串
menuIdentifier 菜单的故事板控制器标识符  否 控制器 字符串 menu
homeIdentifier 主页/默认内容的故事板控制器标识符  否 控制器 字符串 主页
popGesture 标志,用于指定是否允许内容控制器上的交互式弹出手势  否 控制器 布尔型 false
contextPath 绑定上下文路径  是 控制器 ModelEntity
themeName 主题名称的绑定路径  是 控制器 字符串
encryption 加密标志的绑定路径  是 控制器 布尔型 #true
protection 保护标志的绑定路径  是 控制器 布尔型 #true
protectionTimeout 保护的超时时间(以分钟为单位)的绑定路径  是 控制器 整型 #5
protectionCover 保护覆盖可见标志的绑定路径  是 控制器 布尔型 #true
protectionImage 保护覆盖图像的绑定路径  是 控制器 UIImage
protectionText 保护覆盖文本的绑定路径  是 控制器 字符串
menuHideStatusBar 标志的绑定路径,指定在以下情况下是否隐藏状态栏  是 控制器 字符串

保护

如果模型设置中激活,应用可以通过面部识别进行保护。当保护激活时,会显示保护覆盖,以在退出应用时隐藏下面的敏感应用程序数据。指定的分钟数内的保护超时,如果需要使用面部识别重新认证以挂起保护覆盖。

模型菜单表(模型列表表)

模型菜单表控制器 ModelMenuTableController 显示在模型应用控制器中的菜单。它用于根据菜单选择通过故事板标识符显示内容。

在模型菜单表控制器 ModelMenuTableController 中存在以下 @IBInspectable 属性

名称 描述 可绑定 上下文 类型  默认值
storyboardName 默认的故事板名称  否 控制器 字符串
identifier 默认目标导航的故事板控制器标识符  否 控制器 字符串
rowIdentifier 行附加控件点击的故事板控制器标识符  否 单元格 字符串
hideMenu 标志,用于指定是否在导航后关闭菜单  否 单元格 布尔型 true

模型菜单栏按钮项

表示菜单按钮(包括汉堡图标)的 UIBarButtonItem,可直接使用。

菜单设置表(模型详情表)

模型设置表控制器 ModelSettingsTableController 在模型应用程序控制器中显示模型设置。模型详情表控制器与 ModelSettings 实体的绑定应使用 ModelSettingsTableController 基类,因为这样会自动处理主题、加密、保护等设置的无效化。

模型备份表

模型备份表 ModelBackupTableController 显示模型备份列表。此外,可以创建新的备份或删除现有备份。在备份期间,导出所有模型。选择备份会触发导入现有备份的操作,并在显示确认弹窗后覆盖当前模型。

备份存储在文档目录的 okit/backup 文件夹中。

模型安全备份表

模型安全备份表 ModelSecureBackupTableController 允许一个安全弹窗,用于输入备份创建和备份导入的密码。

open func dataToBackup(sourceURL: URL, targetURL: URL, name: String, password: String) throws -> Bool

函数 dataToBackup 可以在子类中重写,以创建和复制受密码保护的.zip文件。

open func backupToData(sourceURL: URL, targetURL: URL, name: String, password: String) throws -> Bool

导出被暂时存储在文档目录的 okit/export 文件夹中,以供备份逻辑进一步处理。例如,函数 backupToData 可以在子类中重写,以提取受密码保护的.zip文件并将其复制到目标位置。

模型主题

提供了一个内置的主题概念。中心类是 ModelTheme。有两个内置的主题

  • ModelTheme.defaultTheme:iOS默认主题
  • ModelTheme.darkTheme:框架提供的默认暗色主题

自定义主题

可以创建并注册自己的自定义主题到 ModelTheme 类中

public static func register(theme: ModelTheme, name: String)

可以通过模型绑定或通过显式使用 func applyTheme(_ theme: ModelTheme?) 设置模型应用中的主题。

模型控件

<abstract> 模型视图

基于视图的控件的抽象基类,支持模型绑定。

名称 描述 可绑定 上下文 类型  默认值
contextPath 绑定上下文路径 控件 ModelEntity

模型帮助视图

可以为列表和详细模型控制器连接一个可帮助视图到 IBOutlet helpView。它处理模态帮助视图的显示和丢弃。帮助视图内容可以在故事板中静态建模或通过子类化模型帮助视图动态建模。

模型标签

UILabel的可绑定表示。以下存在以下 @IBInspectable 属性:

名称 描述 可绑定 上下文 类型  默认值
contextPath 绑定上下文路径  是 标签 ModelEntity
textPath 标签文字的绑定路径  是 标签 (Attributed)字符串
showPath 标签可见性的绑定路径  是 标签 布尔型

模型按钮

用于表示 UIButton 的可绑定表示。以下存在以下 @IBInspectable 属性:

名称 描述 可绑定 上下文 类型  默认值
contextPath 绑定上下文路径  是 按钮 ModelEntity
iconPath 按钮图标绑定的路径  是 按钮 UIImage
titlePath 按钮标题绑定的路径  是 按钮 字符串
tapPath 按钮点击事件绑定的路径  是 按钮 函数
showPath visiblePath  是 按钮 布尔型
enabledPath labelSelectStatePath  是 按钮 布尔型

模型工具栏按钮项

用于表示 UIBarButtonItem 的可绑定表示。以下存在以下 @IBInspectable 属性:

名称 描述 可绑定 上下文 类型  默认值
contextPath 绑定上下文路径  是 工具栏按钮项 ModelEntity
tapPath 点击事件绑定的路径  是 工具栏按钮项 函数
enabledPath 启用状态绑定的路径  是 工具栏按钮项 布尔型

模型菜单栏按钮项

表示菜单按钮(包括汉堡图标)的 UIBarButtonItem,可以直接使用。

模型单元格

表格单元格

用于表示 UITableViewCell 的可绑定表示。以下存在以下 @IBInspectable 属性:

名称 描述 可绑定 上下文 类型  默认值
contextPath 绑定上下文路径  是 单元格 ModelEntity
path 文本标签文本绑定的路径  是 文本标签 (Attributed)字符串
detailPath 详细文本标签文本绑定的路径  是 详细文本标签 (Attributed)字符串
imagePath 图片视图图片绑定的路径  是 图片视图 UIImage
ribbonColor 单元格标签颜色上下文路径  是 单元格 颜色
editPath 编辑模式下文本标签文本绑定的路径  是 文本标签 (Attributed)字符串
editDetailPath 编辑模式下详细文本标签文本绑定的路径  是 详细文本标签 (Attributed)字符串
editImagePath 编辑模式下图片视图图片绑定的路径  是 图片视图 UIImage
editRibbonColor 编辑模式下单元格标签颜色上下文路径  是 单元格 UIColor
accyPath 将附件类型绑定到路径  是 单元格附件类型 AccessoryType, Int
accyIcon 将附件视图按钮图标绑定到路径  是 附件视图按钮单元格 UIImage
accyText 将附件视图按钮文本绑定到路径  是 附件视图按钮单元格 字符串
accyTap 将附件视图触摸绑定到路径  是 附件视图单元格 函数
accyShow 将附件视图可见性绑定到路径  是 附件视图单元格 布尔型 #true
accyEnabled 将附件视图按钮启用状态绑定到路径  是 附件视图按钮单元格 布尔型 #true
accyEditPath 将编辑模式下附件类型绑定到路径  是 单元格附件类型 AccessoryType, Int
accyEditIcon 将编辑模式下附件视图按钮图标绑定到路径  是 附件视图按钮单元格 UIImage
accyEditText 将编辑模式下附件视图按钮文本绑定到路径  是 附件视图按钮单元格 字符串
accyEditTap 将编辑模式下附件视图触摸绑定到路径  是 附件视图单元格 函数
accyEditShow 将编辑模式下附件视图可见性绑定到路径  是 附件视图单元格 布尔型 #true
accyEditEnabled 将编辑模式下附件视图按钮启用状态绑定到路径  是 附件视图按钮单元格 布尔型 #true
heightDisplay 将单元格高度绑定到路径  是 单元格 浮点数
heightEdit 将编辑模式下单元格高度绑定到路径  是 单元格 浮点数
heightSelect 将选择模式下单元格高度绑定到路径  是 单元格 浮点数
showDisplay 将单元格可见性绑定到路径  是 单元格 布尔型 #true
showEdit 将编辑模式下单元格可见性绑定到路径  是 单元格 布尔型 #true
selectNextRow 将下一行(正数)/前一行(负数)单元格索引委托到选择路径的绑定  是 单元格 整型
selectNextAccent 将下一行选择时的强调颜色绑定到路径  是 单元格 布尔型 #true

<abstract> 编辑单元格(表格单元格)

可绑定表示可编辑的 UITableViewCell。存在以下 @IBInspectable 属性

名称 描述 可绑定 上下文 类型  默认值
readOnly 绑定以控制只读状态  是 控件 布尔型  #false
controlInDisplay 绑定以在显示模式下显示/隐藏控件  是 控件 布尔型 #true

开关单元格(编辑单元格)

包含 UISwitch 控件的 UITableViewCell 的可绑定表示。存在以下 @IBInspectable 属性

名称 描述 可绑定 上下文 类型  默认值
onPath 将开关的 isOn 属性绑定到路径  是 开关 布尔型

文本单元格(编辑单元格)

包含 UITextField 控件的 UITableViewCell 的可绑定表示。存在以下 @IBInspectable 属性

名称 描述 可绑定 上下文 类型  默认值
textPath 将文本字段文本绑定到路径  是 文本字段 字符串
placeholder 将文本字段占位符绑定到路径  是 文本字段 字符串
secure 将绑定路径设置为文本字段的安全文本输入  是 文本字段 布尔型 #false

日期单元格(编辑单元格)

包含 UIDatePicker 控件的 UITableViewCell 的可绑定表示。以下存在以下 @IBInspectable 属性

名称 描述 可绑定 上下文 类型  默认值
datePath 绑定到日期控件日期的路径  是 日期选择器 日期
minDatePath 绑定到日期控件最小日期的路径  是 日期选择器 日期
maxDatePath 绑定到日期控件最大日期的路径  是 日期选择器 日期
modePath 绑定到日期控件模式的路径  是 日期选择器 UIDatePicker.Mode, Int #2

多行单元格(编辑单元格)

包含 UITextView 控件的 UITableViewCell 的可绑定表示。以下存在以下 @IBInspectable 属性

名称 描述 可绑定 上下文 类型  默认值
textPath 绑定到文本视图文本的路径  是 文本视图 字符串
placeholder 绑定到文本视图占位符的路径  是 文本视图 字符串

分段单元格(编辑单元格)

包含 UISegmentedControl 控件的 UITableViewCell 的可绑定表示。以下存在以下 @IBInspectable 属性

名称 描述 可绑定 上下文 类型  默认值
segmentsPath 多部分绑定到分段  是 分段控件 字符串
selectIndexPath 绑定到分段选择索引的路径  是 分段控件 整型
width 绑定到控件宽度的路径  是 分段控件 浮点数  #200

选择器单元格(编辑单元格)

包含 UIPickerView 控件的 UITableViewCell 的可绑定表示。以下存在以下 @IBInspectable 属性

名称 描述 可绑定 上下文 类型  默认值
dataPath 绑定到选择器数据的路径  是 选择器视图 Array<ModelEntity>,Set<ModelEntity>
namePath 绑定到选择器数据行名称属性的路径  是 选择器视图行 字符串
selectionPath 绑定到选择器选择的路径  是 选择器视图 整型

滑动单元格(编辑单元格)

包含 UISlider 控件的 UITableViewCell 的可绑定表示。存在以下 @IBInspectable 属性:

名称 描述 可绑定 上下文 类型  默认值
valuePath 与值的绑定路径  是 滑动条 浮点数
minValuePath 与最小值的绑定路径  是 滑动条 浮点数 #0
maxValuePath 与最大值的绑定路径  是 滑动条 浮点数 #1
minImagePath 与最小值图片的绑定路径  是 滑动条 UIImage
maxImagePath 与最大值图片的绑定路径  是 滑动条 UIImage
width 绑定到控件宽度的路径  是 滑动条 浮点数 #150

步进单元格(编辑单元格)

包含 UIStepper 控件的 UITableViewCell 的可绑定表示。存在以下 @IBInspectable 属性:

名称 描述 可绑定 上下文 类型  默认值
valuePath 与值的绑定路径  是 步进器 双精度浮点数
minValuePath 与最小值的绑定路径  是 步进器 双精度浮点数 #0
maxValuePath 与最大值的绑定路径  是 步进器 双精度浮点数 #100
stepValuePath 与步进值的绑定路径  是 步进器 双精度浮点数 #1

模型帮助视图

可以通过 IBOutlet helpView 连接帮助视图。

模型继承

任何模型实体、控制器及其派生类都可以继承,并且可以重写函数以更改默认行为,因为大多数定义都被标记为 openpublic