ios - 从垂直堆栈视图中删除视图
问题描述
菜鸟问题一如既往。
我有包含垂直堆栈视图的 ViewController。堆栈内部是标签和文本字段(标签描述要输入到文本字段中的文本)。根据用户从前一个屏幕上的表格中的项目列表中选择的内容,我想更改向用户显示的标签+文本字段。
为简单起见,我想一次性删除两者。我已经能够使用标签从视图中删除文本字段+标签。但是我不能将相同的标签号分配给标签和文本字段,然后一次将它们从视图中删除。目前一次删除标签和文本字段看起来像......
if let viewWithTag = self.view.viewWithTag(1) {
viewWithTag.removeFromSuperview()
}
if let viewWithTag = self.view.viewWithTag(2) {
viewWithTag.removeFromSuperview()
}
使用相当多的标签+文本字段来解决这个问题可能会变得混乱。
接下来,我查看了将 UIView 插入堆栈,然后将我的标签+文本字段添加到该视图中。然后我可以为 UIView 分配一个标签并一次性删除,但是垂直 stackview 内的 uiviews 对齐是一团糟,我真的不知道如何修复它。似乎不是正确的方法?
想知道我是否需要将标签号粘贴到某种数组中并创建一个函数来简化使用标签删除的过程?
任何有关如何处理的帮助表示赞赏。
解决方案
a 中的视图UIStackView
已经是一个索引数组,可以通过堆栈视图的.arrangedSubviews
属性访问。
因此,假设您有 8 个标签/字段对,它们将被索引如下:
如果要删除第 4 对(标签 4 和字段 4),可以执行以下操作:
stackView.arrangedSubviews[6].removeFromSuperview()
这将删除“标签 4”(请记住,数组索引是从零开始的)。
现在,“字段 4”位于[6]
,所以再次调用它:
stackView.arrangedSubviews[6].removeFromSuperview()
也就是说,根据您的操作,您可能会发现在运行时添加标签/字段对更容易。
这些方面的东西:
let labels: [String] = [
"First name",
"Last name",
"Age",
"Favorite color",
"Favorite food",
"Favorite animal",
]
// based on selection from previous view controller,
// let's show First name, Last name, Fav color and animal
let pairsToShow: [Int] = [0, 1, 3, 5]
pairsToShow.forEach { idx in
let v = UILabel()
v.text = labels[idx]
v.backgroundColor = .yellow
stackView.addArrangedSubview(v)
let t = UITextField()
t.borderStyle = .roundedRect
stackView.addArrangedSubview(t)
}
我们最终得到了这个:
推荐阅读
- javascript - 如何转换以属性值作为键的对象结构?
- php - 如何从api获取特定数据
- python - 熊猫排在 groupby 和 cut 之后
- python - 如何使用不同的 dpi 在 Subplot 保存中绘制多个 Seaborn Jointplot
- python - 为什么我不能用内置总和对列表求和?
- web - 首次加载页面时如何设置嵌入网页的iFrame自动刷新一次
- javascript - 如何将 AJAX 结果中的内容插入元素而不删除其现有内容?
- javascript - 为什么我的 API 在使用 JWT 后不再工作?
- swift - 错误:属性初始化程序中不能发生“异步”调用
- html - 在非常小的视口(<320px)上缩放网站