【问题标题】:Reusable Custom UI View w/ Parameters带参数的可重用自定义 UI 视图
【发布时间】:2018-12-26 13:54:05
【问题描述】:

我创建了一个 UIView 的自定义子类,该子类具有标签、图像和文本输入以及自定义 .xib 文件。该类旨在成为可以轻松重用以生成表单的项目。标签只是文本输入上方的标题,图像是自定义图标,根据字段是否需要显示/隐藏。现在在表单中,我正在构建它:

  • 实例化我的自定义视图的 UINib

  • 设置标签的文字

  • 将 UINib 的实例添加到数组中

  • 数组构建完成后,遍历每个item,将其强制转换为UIView,添加为子视图,最后添加约束

我的问题是 - 理想情况下,我想创建一个自定义 init 函数,在其中传入 2 个参数:标题(用于标签)和布尔值(如果需要)。我尝试进行单独的初始化,但是在运行模拟器时,什么也没出现。看来我需要调用 UINib(...).instantiate(...) 函数才能显示实际视图;但是,我不知道如何在初始化期间分配变量。我感谢任何反馈/建议/资源/等。谢谢!

【问题讨论】:

  • 所以你想用一个功能来实现所有这些?
  • 并非全部,只是列出的前 2 个项目符号。理想情况下,我可以调用 InputElement(title: "Name:", isRequired: true) 之类的东西,它将初始化 xib 文件并知道将标题标签的文本填充为“Name”并显示所需的图标/图像视图,因为 isRequired 为真

标签: swift uiview


【解决方案1】:

您可以编写一个便利的 init,首先调用 self.init,然后将便利 init 中的参数应用到您的视图中,例如:

convenience init(title: String, isRequired: Bool) {
    self.init()
    titleLabel.text = title
    titleLabel.isHidden = isRequired
}

【讨论】:

  • 谢谢!所以目前,我正在从另一个类初始化它。我正在使用 UINib(...).instantiate(...) 。相反,我会调用我的自定义初始化吗?如果是这样,我还需要在某处实例化xib吗?似乎当我调用实例化函数时,我在自定义初始化中设置的类参数为零
  • 经过进一步研究,这种便利的 init 不能与 xib 文件一起使用,它只有在视图类以编程方式初始化的情况下才有效。抱歉混淆,您可以将您的视图设置为 IBInspectable 以便能够在 xib 文件上编辑它们,但我认为这不是您想要的。 @JD2017
猜你喜欢
  • 1970-01-01
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
相关资源
最近更新 更多