可视化Segues

Segues允许应用程序转换视图并将数据从一个视图传递到另一个视图。 例如,如果您在iPhone上打开通讯录,则可以使用segue从所有联系人的完整列表转到一个特定的联系人,并说明了从一个屏幕切换到另一个屏幕的操作以及屏幕上显示的信息。目标屏幕。

segue的概念很简单,但是当我第一次遇到将segue付诸实践的代码时,我很难理解每个部分的含义。 当编码概念开始让我有些迷惑时,我发现可视化和创建类比非常有用。 因此,在本博文中,我将深入研究下面的示例segue代码,并创建一个故事以帮助直观地看到这些代码段的含义。

我假设读者熟悉以下基础知识:调用prepareForSegue函数的语法,情节提要的组成部分,Xcode项目中需要的文件等,等等。基本上,本文的目的不是引导您逐步了解实现segue所需的各个部分,而是帮助您描述功能中发生的事情。

让我们开始!

我们的故事

我们的故事发生在杂货店。 这家杂货店有很多过道。 通道7是谷物通道,即最佳通道。 如此多的美味含糖早餐美食! 这是我们故事的起点。

这家杂货店使用端盖或每个过道的末端来展示特殊物品和促销。 看看下面的端盖图片。 谷物交易多么划算!

由于这是一个令人难以置信的故事,所以我们也可以说杂货店使用很酷的机器人程序(是的,实际的程序,是字面上的类推),在商店中进行任何繁重的物品搬运或运输。

Segues并不是很聪明,因此他们需要商店中人员的详细说明,以便能够将物品从一个位置带到另一个位置,以及在新位置更新标志和价格。 当然,segues只了解用Swift编写的方向!

今天,杂货店经理想在端盖上设置谷物的特殊展示。 正在进行大甩卖! 经理需要将segue用于将谷物从第 7通道拖到 端盖

1.选择segue

首先,经理需要确保自己的工作正确无误。 (如果她不小心抓住了一个编程的从通道4拿走糖果并将其放入结账通道的方法呢?!)这是她写这些指令的方式:

仅在此标记具有标识符“ moveCereal”的情况下,其余说明才能继续进行,这意味着管理者的标记将从第7通道移动到端盖。 (在现实世界中,这些连接详细信息是在情节提要中设置的。)太好了!

2.告诉segue去哪里

现在,经理告诉segue去哪里。 segue的最终目标是结束盖帽,在这里称为EndCapViewController 。 最终的目的地简称为newLocation

为了可视化,这是在segue将任何内容移到那里之前, newLocation端盖现在的样子。 请注意,没有任何标志说明正在出售什么,而且货架上没有任何物品! segue稍后将填充这些内容。

3.告诉segue在哪里可以找到正确的谷物

接下来,经理告诉segue到底在哪里找到需要移动的谷物。 Segues不能分开阅读或分辨谷物箱,但可以在网格上或架子上找到坐标! 这些架子坐标称为indexPathsForSelectedItems。

但是segue应该将这些架子坐标应用于哪些架子? aisle7Shelves ,当然是在起始位置! (在现实世界中,这是当前视图或开始视图上的UICollectionView的名称。)

同时,segue会自动假设它将要接收许多货架坐标(请注意,它是索引Paths ForSelected Items的索引而不是索引Path ForSelected Item的索引!),但是经理实际上只想要一种谷物,因此只需要一组谷物坐标。 既然是这种情况,她将专门指示segue仅遵循第一组坐标:

现在,segue可以转到货架上单个谷物盒的精确位置。 (在现实世界中,indexPathsForSelectedItems是一个数组,用于记录谷物的部分索引号和项目索引号。您实际上并不需要这些数字,但是通过在运行应用程序时将它们打印出来可以将其可视化!)

4.告诉segue挑选正确的谷物

嗯,segue到达了正确的位置,但只是坐着坐着,什么也不做! 怎么了? 糟糕,经理忘记告诉segue实际拿起谷物盒了! 她通过在指令中添加.item来实现。 这将导致segue可以读取以找到该物品的单个数字。

这是一组复杂的指示,因此管理者决定将其简称为originalLocationNumber 。 总体而言,这部分说明如下所示:

现在,segue转到指示正确的谷物盒的数字并拿起盒子,准备将其信息传输到newLocation

5.告诉segue需要在端盖显示屏上设置哪些信息

现在,经理将告诉segue需要在端盖newLocation上更新哪些标识和信息。 事实证明, newLocation有两个空的地方正等着被填满:一个描述正在出售的商品的标牌,以及一个用于谷物盒的架子的位置。 管理员开始按照以下步骤进行设置:

新标牌和谷物盒的详细信息必须与走道7中的塞格捡起的物品的细节相匹配。 嗯,是的,它捡起了位于走道7中一个编号位置originalLocationNumber的谷物。

同时,所有谷物都会自动有一个名称和一个框。 (在现实世界中,这是因为Cereal类是使用这两个属性初始化的。)让我们将这些详细信息添加到指令中。 在Aisle 7的所有谷物中,转到原始 LocationNumber上的谷物 并使用其名称更新newLocation的端盖。

就是这样! 一旦segue沿所有这些方向运行,更新的端盖将如下所示:

经理指示了地点,他们地点了谷物盒,并更新了端盖信息,此后所有人都过着幸福的生活。 结束!

代码回顾

在此示例中,我使变量名非常适合该故事,并试图使它们非常清楚地说明它们的作用。 我发现在杂货店特有的代码旁边阅读更多的标准代码,以更好地可视化每个代码的作用是有帮助的。

如果您想引用该项目的完整代码,请随时在Git上进行检查。 我希望这对您有用! 谢谢阅读!