【问题标题】:How to make a reusable UILabel and UITextField programmatically如何以编程方式制作可重用的 UILabel 和 UITextField
【发布时间】:2018-12-24 09:59:55
【问题描述】:

我想制作一个可重复使用的 UILabel 和 UITextField 这样就不会重复了,我该怎么做?这是我的代码

let nameLabel: UILabel = {
    let label = UILabel()
    label.text = "Name"
    label.textColor = .white
    return label
}()

let nameTextField: UITextField = {
    let tv = UITextField()
    tv.placeholder = "Name"
    tv.textColor = #colorLiteral(red: 0.6078431373, green: 0.6078431373, blue: 0.6078431373, alpha: 1)
    return tv
}()

let emailLabel: UILabel = {
    let label = UILabel()
    label.text = "Email"
    label.textColor = .white
    return label
}()

let emailTextField: UITextField = {
    let tv = UITextField()
    tv.placeholder = "Email"
    tv.textColor = #colorLiteral(red: 0.6078431373, green: 0.6078431373, blue: 0.6078431373, alpha: 1)
    return tv
}()

【问题讨论】:

  • 子类化它们,或将它们包装到自定义控件中。
  • 或者使用一种工厂方法用你需要的任何(颜色、文本)生成它们。

标签: ios swift uitextfield uilabel


【解决方案1】:

使用计算属性,每次访问都会返回一个新实例

var emailLabel: UILabel  {
    let label = UILabel()
    label.text = "Default"
    label.textColor = .green
    view.addSubview(label)
    return label
}

let em1 = emailLabel 
em1.text = "dshjsdhdshdhdshjdsh" 
em1.frame = CGRect(x: 0, y: 0, width: 100, height: 100)


let em2 = emailLabel 
em2.text = "dshjsdhdshdhdshjdsh"
em2.frame = CGRect(x: 0, y: 100, width: 100, height: 100)

【讨论】:

  • UILabel 是类,类是引用类型。这意味着 em1 和 em2 具有与 emailLabel 相同的 ref。
  • @dahiya_boy 你可以试试看,第二次访问emailLabel返回一个新实例
  • 哦,您在 emailLabel 中创建了新实例。我的错。
  • 但这似乎是对计算属性的奇怪使用,是吗?而是使用一个函数让它看起来更具可读性?
  • @Tj3n 我故意回答这个问题是为了突出它和操作码之间的区别,当然函数和子类也是另一种选择
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-01
  • 2019-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多