可折叠输入表单 Swift 3

Posted

技术标签:

【中文标题】可折叠输入表单 Swift 3【英文标题】:Collapsible input form Swift 3 【发布时间】:2017-08-21 07:16:12 【问题描述】:

我真的很失望,这就是我问这个问题的原因,我在网上找到了 Collapsible TableView 的教程,但它们是用字符串数组或类似的东西填充单元格。

我想用Swift 3 制作这样的手风琴,

几天来,我已经用UITableViewController 尝试了很多东西,因为如果你想要不同的单元格,显然这是唯一可以折叠的东西。

无论如何我都开始这样做了,但正如我所问的my question here 我不能在每个Section 的每个Cell 中显示不同的UIs。

我确信有办法做到这一点,有人对如何使这项工作有任何建议吗?

我想也许还有其他方法可以做到这一点(例如使用ScrollView 或其他方式)

【问题讨论】:

你试过UIStackView吗? @AndréSlotta 不,我没用过,我现在用谷歌搜索一下 @AndréSlotta 我以前确实使用过它们,但我从它们那里知道的唯一用途是将一些 UI 放在一个 UI 中,以便于进行约束。但是它如何帮助我做出上述的事情呢? 您可以将UIButton 作为垂直UIStackView 的第一个元素(展开/折叠一个部分),并在点击时为其余元素设置hidden 属性。 @Abed Naseri 此链接将解决您的问题并让您知道该怎么做 -:appcoda.com/expandable-table-view。这不在 swift3 中,但您绝对可以在堆栈上找到一个,我在堆栈上发布了完整的解决方案 -:***.com/questions/43818004/… 【参考方案1】:

您可以使用UIStackView 来实现它:

    通过情节提要添加垂直UIStackView 添加UIButton 作为UIStackView 中的第一个子视图 添加一些UILabels 作为UIStackView 中的第二个、第三个...子视图 为UIButton(第一个子视图)添加一个IBAction

像这样实现IBAction

@IBAction func sectionHeaderTapped(sender: UIButton) 
    guard let stackView = sender.superview as? UIStackView else  return 
    guard stackView.arrangedSubviews.count > 1 else  return 
    let sectionIsCollapsed = stackView.arrangedSubviews[1].hidden

    UIView.animateWithDuration(0.25)  
        for i in 1..<stackView.arrangedSubviews.count 
            stackView.arrangedSubviews[i].hidden = !sectionIsCollapsed
        
    

像这样创建多个UIStackViews(您始终可以为UIButton 使用相同的IBAction)并将它们全部嵌入到父(垂直)UIStackView 中,以创建类似于屏幕截图中的视图。

如果有什么不清楚的地方可以随时提问。

结果:

【讨论】:

非常有趣的方式,我真的很喜欢它,因为我不需要经历 TableViews 和单元格的复杂性。十分感谢。只是一个小问题:我有大约 10 个这样的 StackView,最好用什么?滚动视图?如果是的话,如果你知道,你能说一下怎么做吗? 使用UITableView 实际上也很容易。使用 UITableViewController 这有一些不错的优点,例如自动处理键盘。 @AbedNaseri 是的,UIScrollView 是最好的选择。只需将您的外部(父)UIStackView 嵌入到UIScrollView 中并设置特定的约束。

以上是关于可折叠输入表单 Swift 3的主要内容,如果未能解决你的问题,请参考以下文章

可折叠显示的发光搜索表单

在表单组中折叠

默认情况下折叠节点表单上的分类字段集

面板折叠 ExtJS 上的 HTMLEditor 文本区域丢失数据

Swift IOS在实时jquery中捕获html表单输入

为什么使用f:ajax(JSF)更新后,我的Materialize可折叠菜单不起作用?