AKABeacon 0.3.1

AKABeacon 0.3.1

测试已测试
语言语言 Obj-CObjective C
许可证 BSD
发布时间最后发布2016年5月

Michael Utech维护。



AKABeacon 0.3.1

  • 作者:
  • Michael Utech

iOS的数据绑定

AKABeacon是一个为Interface Builder设计的iOS数据绑定框架。

新闻

版本0.3

  • 移除了依赖AKACommons(已合并)和CocoaLumberjack(临时,直到完成模块podspec)。
  • 支持条件绑定表达式($when, $whenNot, $else)
  • 重构了UITableView数据源绑定以使用条件单元格映射

内容

安装与集成

Beacon可在CocoaPods上使用。

要集成AKABeacon,请在Podfile中启用use_frameworks!并添加AKABeacon依赖项

use_frameworks!
...
pod 'AKABeacon', '~> 0.3'

如果您在使用CocoaPods try插件,则可以通过以下方式轻松开始使用Beacon进行实验:

$ pod try AKABeacon

(此处通常是具体插件的操作步骤或命令)

许可证

BSD 2-clause,参阅LICENSE.txt文件

入门

一旦将框架集成到项目中,就可以通过以下方式使用绑定:

  • 在Interface Builder中
  • 以与之前相同的方式设计Storyboards或NIB文件中的视图层次结构

在代码中

  • 在您的视图控制器中启用绑定支持。启用绑定支持。为此,请在ViewController的viewDidLoad方法中添加[AKABindingBehavior addToViewController:self](您需要@import AKABeacon;)。
  • 默认情况下,您的视图控制器用作根视图模型,因此它必须提供用于绑定表达式的键路径属性。对于上面的示例,绑定将期望视图控制器实现一个符合键值编码的属性myTextProperty

示例项目包含大量不同类型的绑定示例。

文档

如何使用Beacon

典型使用场景(图中黄色气泡表示您要进行的操作)

  • 您在项目中添加Beacon框架。之后,您将在Interface Builder属性面板中找到视图和视图控制器的新属性。
  • 为您的视图控制器启用绑定支持,这通过添加子视图控制器行为来实现。
  • 您的视图控制器提供属性或对您的模型数据的引用。
  • 您在Interface Builder中设计视图,并将要将数据绑定到其上的视图的绑定表达式分配给这些视图。

幕后发生的事情(Beacon的工作,图中所有蓝色部分)

  • 当您启用绑定支持时,Beacon将作为子视图控制器添加绑定行为到您的视图控制器。这个行为会接收到与您自己的控制器相同的生活周期事件。
    • viewDidLoad: 移植行为将检查您的视图层次结构以找到定义绑定表达式的视图,并为它们创建绑定
    • viewWillAppear: 绑定将以视图模型的内容初始化视图,同时观察两端的变化,并进行必要的更新。
    • viewWillDisappear: 绑定将停止观察变化。

Binding Schematics

许多任务实际上是由负责管理绑定、提供数据上下文和控制视图层次结构行为的控件执行的。在大多数情况下,您可以忽略控件,因为它们在不打扰您的透明操作中完成了工作。如果您需要与之交互,它们提供了精细粒度的代理方法,您可以使用这些方法来检查和控制控件和绑定的行为。如果您的视图控制器符合该协议,它将自动用作AKABindingBehaviorDelegate。

请注意,Beacon中的大多数模块都是设计成独立的。例如,您可以用绑定而不用控件,并且无需使用表单视图控制器来管理控件和绑定。

我们投入了大量精力确保您可以在不破坏您现有的架构的情况下,使用框架中真正帮助您的部分,以整合数据绑定功能。

我们还努力完成所有支持标准用例的工作,以使您不必编写代码,就可以确保在您键入时文本字段是可见的,而且在旋转设备时它仍然可行。这比滚动要深入得多。在未来的版本中,您将获得对主题、自动调整字体大小、突出显示搜索词、表单事务支持(在响应当前表单编辑会话的最后,并且只有有效时才更新模型值)等的自动支持。

示例

注意:这里提供的示例已经过时,请查看演示应用程序以获取最新的印象。

示例 1:文本字段绑定示例

以下截图显示了一个包含三个文本字段的视图。前两个字段绑定到 stringValue 属性,第一个文本字段会在每次按键后更新数据源,第二个文本字段会在文本字段失去键盘焦点时更新。

第三个文本字段绑定到数字值,展示了不同的编辑和显示数字格式。

第一个文本字段绑定表达式

stringValue {
    textForUndefinedValue: "(Please enter some text)",
    treatEmptyTextAsUndefined: $true
}

第二个文本字段绑定表达式

stringValue { liveModelUpdates: $false }

第三个文本字段绑定表达式

numberValue {
    numberFormatter: {
        numberStyle: $enum.CurrencyStyle
    },
    editingNumberFormatter: {
        maximumFractionDigits: 5
    }
}

视图控制器

屏幕截图

Number Editing

示例 2:选择器键盘

选择器键盘触发视图包含内容并且通过打开包含选择器视图的键盘来响应用户的点击触摸。本例显示了两个此类触发视图。第一个配置为从字符串数组中选择字符串,并包含一个与选中值绑定的标签。第二个触发视图从对象数组中选择对象(以选择标题显示标题属性)。

本处使用的绑定表达式为

第一个选择器绑定表达式

标签:(连接标签到键路径 stringValue 并配置绑定,在值未定义时显示“(点击选择)”)

stringValue {
    textForUndefinedValue: "(tap to choose)"
}

选择器:(选择器键盘从 stringArrayValue 获取其选项。由于没有指定标题,数组条目将用作相应选项的值)

stringValue {
    choices: stringArrayValue,
    titleForUndefinedValue: "(please choose)"
}

第二个选择器和标签绑定表达式

标签:(此选择器包含多个标签,这些标签绑定到数据上下文的不同属性,在本例中为对象)

objectValue.title
objectValue.value

选择器:(此处,数组项是复杂对象,因此将标题属性定义为相对于相应数组项的键路径;选择器键盘还支持设置 liveModelUpdates)

objectValue {
    title: title,
    choices: objectArrayValue,
    liveModelUpdates: $false
}

日期选择器绑定表达式

日期选择器标签:(参见标签格式说明部分)

dateValue { dateFormatter: { dateStyle: $enum.LongStyle, timeStyle: $enum.MediumStyle } } 

选择器:(日期选择器只需要选中值的键路径)

dateValue

视图控制器

屏幕截图

Picker keyboard trigger views

示例 3:标签绑定演示

以下示例展示了 Beacon 的内置格式化能力。Beacon 使用 NSFormatter 作为界面进行格式化,并分别使用 NSNumberFormatter 和 NSDateFormatter 对数字和日期进行格式化。您可以定义其他类型的自定义格式化器。

数字

numberFormatter 属性支持 NSNumberFormatter 大多数配置属性。枚举值可以是 $enum.Value(如果枚举为 Beacon 所知)或 $enum.Type.Value(您可以为您自己的枚举提供映射)。

floatValue {
    numberFormatter: {
        numberStyle: $enum.CurrencyStyle
    }
}

布尔值

textForYestextForNo 允许您将数字值映射到标题。

boolValue {
    textForYes: "Yes",
    textForNo: "No"
}

文本值

如果您不需要任何格式化,只需指定值的键路径就足够了。

textValue

复杂数值和自定义格式化器

您可以通过指定尖括号内的类名来使用自己的格式化器。然而,您将被限制为能够表示为自定义格式器配置的绑定表达式的数据类型。如上所述,枚举值可以注册

objectValue {
    formatter: <CustomFormatter> {
        format: "Hello, %@"
    }
}

我们计划支持如 mustache 或 handlebars 之类的模板库。一旦实现,类似的示例将如下所示

objectValue {
    formatter: <MustacheFormatter> {
        template: "Hello, {{givenName}} {{familyName}}"
    }
}

日期值

类似于数字值,日期值可以使用 NSDateFormatter 进行格式化。

dateValue {
    dateFormatter: {
        dateStyle: $enum.NSDateFormatterStyle.LongStyle,
        timeStyle: $enum.LongStyle
    }
}

视图控制器

屏幕截图

Label Formatting