【发布时间】:2017-04-01 23:06:32
【问题描述】:
我有一个包含 100 个 IBOutlet 的视图控制器,我想根据是否在 Dictionary 中找到该 IBOutlet 的名称作为键来隐藏或显示它们。
我到底该怎么做呢?我的直觉告诉我
for item in Dict {
// try to refer to an IBOutlet using data from my Dictionary
self.\(item.key).hidden = false
}
当我尝试这样做时,Swift 显然会抛出错误。
我对此很陌生,甚至不知道该怎么称呼我正在尝试做的事情。甚至有可能做到这一点吗?有没有更好的方法来做到这一点?
我想避免写 100 个“if”语句。
【问题讨论】:
-
我很确定拥有 100 甚至 40 个网点表明您的架构存在一些非常糟糕的问题。按名称访问变量是另一种反模式。请分享更多您的代码,我们可以然后帮助您解决真正的问题。
-
我有 100 个方形 UIView,它们出现在特定位置的 View Controller 中。我想根据数据动态显示或隐藏它们。我知道我可以以编程方式绘制它们,但我相信这也意味着以编程方式编写 400 个约束(高度、宽度、X 位置、Y 位置),这听起来非常痛苦和复杂。
-
这绝对比在 IB 中创建数百个约束要容易。另请注意,您不必使用自动布局。这是使用简单的旧自动调整大小会更简单的情况之一。即使为所有视图创建约束也需要大约 30 行。此外,在使用 IB 时,您仍然可以将所有插座连接到一个阵列中,然后按位置对其进行排序。您将拥有 1 个插座而不是 100 个插座,并且您可以使用简单的索引。
-
就我自己的理解而言,“使用自动布局”是什么意思?这是否意味着“使用界面生成器”?还是指别的东西?
-
autolayout = 显式约束,autoresizing = 使用没有约束的帧,带有自动调整掩码(帧在内部转换为约束),现在仅在代码中使用。