【问题标题】:Swift - Many IBOutlets one controllerSwift - 许多 IBOutlets 一个控制器
【发布时间】:2017-07-18 13:44:31
【问题描述】:

我有一个视图控制器,我需要有近 200 个文本字段。 我正在构建一个能耗计算器,我需要让用户能够添加他可能感兴趣的所有字段...

我的问题是: 在内存使用和性能方面会出现问题吗? 有没有更好的方法来添加 200 个 Outlets 来收集用户插入的文本?

【问题讨论】:

  • 您可能应该使用UITableViewUICollectionView 与单元格内的文本字段。他们实现了可重用性。一次显示 200 个文本字段会对性能产生一些影响。
  • 我的问题是我使用所有字段来执行一些数学运算...我不确定如果我使用集合视图是否可以这样做...
  • 即使使用 200 个文本字段,我猜您也将输入值存储在某种数据结构中,而不是直接使用文本字段的文本属性。使用相同的方法,您也可以保留来自所有 tableview/collectionview 单元格的用户输入,即使其中一些在屏幕上不可见,因此它们已被系统重用。
  • 只是为了强调@DávidPásztor 所说的:这就是人们将 UI 和数据模型分开的原因;如果它们彼此独立,则 UI 可以更改而无需修改计算逻辑。
  • 使用核心数据.. 但这只是一个计算器,所以不存储值...无论如何我想使用 tableview 是一个好方法... o 也许我可以创建子视图.. 。 谢谢! :)

标签: ios iboutlet


【解决方案1】:

我建议您在每个单元格中使用 UITableViewUICollectionView 和一个 UITextField。一旦用户开始输入,您就可以存储该值,例如:

class VC: UIViewController {
    private var values: [Int]?

    // code for reuse the cell
    // ............

    // you can use UITextFieldDelegate, store the index the user is at...
    // the logic is up to you
    func userTappedSomething() {
        values?.append(Int(currentFocusedCell.myTextField.text))
    }
}

此逻辑可能会有所不同,因为您可以存储您所在的当前索引路径,甚至是当前正在键入的文本,因此逻辑取决于您,但想法是按顺序存储您点击的每个值,以便您“导航" 在您的 UI 中,并且能够调用 cellForRow 并设置存储的值。

关于文本字段,您可以使用标签或创建带有IBOutlet 的自定义单元格并直接访问。

警告:未经测试的代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    相关资源
    最近更新 更多