行业

汽车

航空

金融

游戏

医疗科技

物联网

数字产品

使用场景

面向企业

面向个人

面向团队

用于教育

主要特点

硬件与系统集成

ProtoPie MCP

多设备原型设计

交互逻辑

开发交接

ProtoPie AI

新

用户测试

插件

Figma

Sketch

Adobe XD

洞见与灵感

博客

白皮书

客户成功案例

活动与网络研讨会

ProtoPie 画廊

产品学习与支持

ProtoPie 学堂

下载 ProtoPie

产品文档

社区

行业

汽车

航空

金融

游戏

医疗科技

物联网

数字产品

使用场景

面向企业

面向个人

面向团队

用于教育

主要特点

硬件与系统集成

ProtoPie MCP

多设备原型设计

交互逻辑

开发交接

ProtoPie AI

新

用户测试

插件

Figma

Sketch

Adobe XD

洞见与灵感

博客

白皮书

客户成功案例

活动与网络研讨会

ProtoPie 画廊

产品学习与支持

ProtoPie 学堂

下载 ProtoPie

产品文档

社区

教程
•

14

阅读时间

使用组件和发送与接收功能在复选框表单中勾选项目

在本课中,你将学习如何有效地使用复选框组件,在你的原型中选中和取消选中项目。

王天阳, 蒙纳士大学设计专业学生

简介

复选框表单是 UI 设计中的一种输入元素,允许用户在一组选项中选择多个选项。一个复选框表单中可以嵌套多个复选框(子项)。用户可以勾选复选框来启用它,也可以取消勾选复选框来停用它。在 Protopie 中,使用组件和 Send & Receive 功能可以轻松实现这一效果。在本课中,我们将使用复选框组件,它包含两个条件触发器以及与每个触发器关联的不透明度响应。该组件还将使用Send & Receive 来勾选/取消勾选场景中的所有项目。

你将学到什么

  1. 创建一个复选框组件

  2. 在组件中添加 **Send & Receive **

  3. 使用 Send & Receive 勾选所有项目

  4. 使用 Send & Receive 取消勾选所有项目

  5. 在变量中存储复选框状态

  6. 全选项响应所有子项

最后,你将能够做出像这样的效果!


Checkbox Form Prototype Made with ProtoPie

[起始 Pie 文件] [完成版 Pie 文件]

分步说明

1. 创建一个复选框组件

 1. 将未选中项制作成一个组件。然后把已选中项复制并粘贴到我们刚创建的组件中。

 组件是带有交互的图层集合,可在原型中重复使用。这可以避免不必要的重复工作并节省时间。你可以将由触发器和响应组成的复选框组件复制到场景中,并在需要时重复使用。


Make the unchecked item a component


ctrl/command + c 复制,ctrl/command + v 粘贴

 2. 重命名图层,并将已选中图层的不透明度设置为0。

 我们需要确保在图层面板中,已选中图层位于未选中图层之上。我们只需控制最上层(已选中图层)的不透明度并将其打开或关闭(打开表示 100%,关闭表示 0%)。在默认状态下,项目应为未选中。由于已选中项位于未选中项之上,因此其默认不透明度应为 0%。


Rename the layers and set the checked layer's opacity to 0


重命名图层,并将已选中图层的不透明度设为 0

 3. 为复选框添加一个 Tap 触发器。


Add a tap trigger to the checkbox

 4. 添加一个条件,并将已选中项的不透明度设为 0。

 条件可以确保某些响应仅在对应条件满足时触发。这里必须使用条件,因为复选框有 2 种可能状态,并且它们彼此冲突。因此我们将使用两个不同的条件,每个条件都会触发一个特定响应。


Add a condition and set the checked item's opacity to 0


条件表示进行逻辑判断(例如 =、<、>),并且仅在逻辑判断通过时触发响应

 5. 当已选中图层的不透明度 = 0 时,使用不透明度响应并将其不透明度值设为 100。

 当不透明度值设为 100 时,已选中图层会显示。因此点击复选框时,如果当前未选中,就会变为已选中。


Use an opacity response and set its opacity value to 100

 6. 当已选中图层的不透明度 = 100 时,使用不透明度响应并将其不透明度值设为 0。

 当不透明度值设为 0 时,已选中图层会消失。因此点击复选框时,如果当前已选中,就会取消选中。


When the opacity value is set to 0, the checked layer disappears

2. 在组件中添加 Send

在组件中,我们需要同时启用 Send 和 Receive。

基本上,组件彼此之间以及与场景是隔离的。为了解决这个限制,我们需要使用 Send 和 Receive。了解更多。

我们需要确保复选框项目在被选中时发送checked消息,在取消选中时发送unchecked消息。还需要确保当任一子项被取消选中时,全选项也应取消选中。同样地,如果所有子项都被选中,全选项也应被选中。

 1. 在项目被选中的条件下添加一个 Send 响应。选择“Send to parent”,并设置一条消息。同时一起发送数值,数值可以是 1。该数值用于区分复选框项目的状态。我们使用1表示选中项目,使用0表示取消选中项目。作为用户,你也可以使用任何数字,只要在整个原型中保持一致即可。

 当我们有同一组件的多个实例时,使用Send to parent。这次我们会在场景中放置 4 个复选框组件实例,所以应使用“Send to parent”通道。

 这次我们还会在Send响应中同时发送数值。取消选中项目时发送 0,选中项目时发送 1。在主场景中,我们会用一些变量来接收这些消息。之后这些变量将用于条件检查,以实现全选项的逻辑。


Add a send response under the condition


使用 Send 响应时,我们始终可以选择是否同时发送一个值

**💡 **通道说明(发送给“谁”)

  • ****Send to Parent:当没有父组件时,从组件向父组件或场景发送消息。

  • Send to Child Component:从组件向子组件发送消息。

  • Send to Current Scene:从组件向该组件所在场景发送消息。

  • Send to Current Component:该通道允许你发送一条仅在组件内部传递的消息。

  • 注意:当我们处理的是具有相同值的组件,或场景中只有一个组件时,可以改用 Send to Current Scene,这种情况下无需指定组件,消息会全局发送到场景。这次我们要使用Send to parent,因为场景中有同一组件的多个实例,并且我们希望知道消息来自哪个实例。

 2. 类似地,在项目被取消选中的条件下添加一个 Send 响应。这次将消息改为“unchecked”,并把值设为 0。

 这些值会发送到主场景并存储在变量中。变量用于保存复选框状态。1 表示复选框已选中,0 表示未选中。


Change the message to 'unchecked' and set the value to 0

3. 使用 Send & Receive 勾选所有项目

 1. 返回主场景。添加一个 Receive 触发器,用于接收来自全选项的消息。


Add a Receive trigger

 2. 当全选项收到名为checked的消息时,所有项目都应被选中。因此我们需要分别给每个项目添加一个 Send 响应,并发送名为checked的消息。

 Send to component通道使我们可以选择把消息发送到哪个组件实例。当全选项被选中时,我们需要确保所有子项同时被选中。全选项会响应该消息,并在被选中时勾选所有子项。


Add a send response to each item individually

 3. 返回组件。添加一个 Receive 触发器以接收来自主场景的消息。当收到名为“checked”的消息时,将已选中组的不透明度设置为 100。

 现在如果我们勾选全选项,其余 3 个子项也会被勾选。


Add a receive trigger to receive the message


“Receive from parent”表示接收来自组件父级的消息;如果没有父组件,则接收来自主场景的消息。

4. 使用 Send & Receive 取消勾选所有项目

******回到主场景。**同样地,如果全选组件收到一个unchecked,它也会分别向每个项目发送一条 **unchecked **消息。

 1. 添加一个 Receive 触发器以接收来自全选项的消息。消息可设为unchecked。


Add a Receive trigger

 2. 当全选项收到名为unchecked的消息时,所有项目都应被选中。因此我们分别给每个项目添加一个 Send 响应,并发送名为unchecked的消息。


Add a Send response to each item individually

 3. 同样地,如果组件收到名为unchecked的消息,则将 **checked **组的不透明度设为 0。


Set the checked group's opacity to 0.

 4. 在预览窗口中检查。现在如果我们取消勾选全选项,其余 3 个子项也会被取消勾选。


Check / Uncheck all items using send & receive

5. 在变量中存储复选框状态

为了让交互更完整,我们希望全选项能响应所有子项,即:

  • 如果所有子项都被选中,全选项也应被选中

  • 如果任一子项被取消选中,全选项也应被取消选中

要实现这一点,我们需要在主场景中知道哪些项目被选中、哪些没有。为此,我们需要使用变量把每个项目的状态存储为数值。

 1. 创建一个变量,用于存储随来自复选框 1 的消息一起发送的值。

 在创建变量时,我们可以创建“所有场景可用”或“仅本场景可用”的变量。这次两种都可以。

 要使用Receive触发器,只需在Add Trigger菜单中添加即可。对于每个Receive触发器,我们可以选择“接收”通道、接收来源的目标组件,并将一个值赋给变量。

 要将值存入变量,只需勾选Assign to Variable选项,并选择要赋值的变量。


Create a variable to store the value


将“checked”状态存储到变量“checkbox1”中


Create a variable to store the value


将“unchecked”状态存储到变量“checkbox1”中

 2. 使用相同的方法,我们可以应用到另外 2 个项目。总共需要 3 个变量和 6 个 receive 来存储勾选项状态。


All together we need 3 variables and 6 receives


选择多个 Trigger 时,可以按 ctrl/command + G 将这些 Trigger 分组

 3. 在预览窗口中检查。你会注意到每次勾选和取消勾选时变量值都会变化。如果任一子项被选中,对应复选框项目的变量值会更新为 1。


Item's variable value updates to 1

 4. 但是使用这种方法时,当我们尝试使用 **Today **项来全选或全不选时,变量中存储的值不会改变。为了解决这个问题,我们需要手动为每个变量赋值。


Assign value manually

 5. 使用相同方法,我们必须分别为 3 个项目赋值。现在变量与状态一致了。


Assign values to 3 items individually

 6. 在预览窗口中检查。现在如果全选项被勾选,则所有子项都被勾选并返回值 1。如果全选项被取消勾选,则所有子项都被取消勾选并返回值 0。


All values got updated

6. 全选项响应所有子项

 1. 为了在任一子项取消选中时取消父项选中,我们可以在任一子项收到unchecked消息时向全选发送消息。

 这意味着只要我们取消勾选任一子项,全选项就会被取消勾选。为实现这一点,我们将让每个子项在被取消选中时都向全选项发送一条unchecked消息。


Make every sub-item send an unchecked message

下面步骤将说明如何实现:

当所有子项都被选中时,全选项也会被选中。与“任一子项取消选中就取消全选”不同,我们会在任一子项状态发生变化时都检查一次是否所有子项都已选中。我们将使用Detect 触发器,这样每个子项都有机会触发全选项。为此,我们需要监控每个变量的值。我们将使用Detect 触发器来监控数值变化。(在Detect触发器中,当图层属性或变量发生变化时会激活响应。)

 1. 给变量checkbox1添加一个 **Detect **触发器。


Add a detect trigger to variable checkbox1

 2. 添加一个条件:所有变量都等于 1。


Add a condition to when all the variables are equal to 1.

 3. 向已选中项发送一条checked消息。


Send a 'checked' message to the checked item

 4. 我们还需要重复该步骤 3 次,以应用到每个项目。

 当任一子复选框状态变量变化时,会检查 3 个子复选框状态变量是否都等于 1(即 3 个子复选框都已选中)。如果是,则需要发送一条消息去勾选全选复选框。


Repeat the step 3 times to apply to each item


这三个触发器具有相同的响应,唯一的区别是 Detect 触发器的对象不同

 5. 在预览窗口中检查。你会注意到,当你勾选Today时,其下所有子项都会被选中。如果你取消勾选任一子项,那么Today也会取消选中。


Final preview

恭喜!

太棒了!现在你已经学会了如何在复选框表单中勾选/取消勾选项目。

[这有帮助吗?告诉我们!]