【问题标题】:Custom class that can be applied to every UITextField - Swift可以应用于每个 UITextField 的自定义类 - Swift
【发布时间】:2018-08-04 01:06:10
【问题描述】:

我对编程非常陌生,正在制作一个包含许多 UITextField 的项目。我想让文本字段的底部只有一个边框,以便看起来更干净,我在这里找到了一些应该实现这一点的代码。

let border = CALayer()
let width = CGFloat(2.0)
border.borderColor = UIColor.darkGray.cgColor
border.frame = CGRect(x: 0, y: textField.frame.size.height - width, width: textField.frame.size.width, height: textField.frame.size.height)

border.borderWidth = width
textField.layer.addSublayer(border)
textField.layer.masksToBounds = true

如何创建一个类,以便我放置在情节提要中的每个 UItext 字段都可以简单地使其成为所述类的一部分?我不想为每个 UITextField 复制和粘贴此代码。有没有一种方法可以单独编辑该类应用到的每个 UITextfield 的占位符文本?

【问题讨论】:

  • 您可以继承 UITextField 并在其中添加所有样式。如果您使用的是故事板,您可以只给它您制作的自定义类名称。
  • 也许我犯了一个错误,但我创建了一个文件,其中包含“class BottomBorderTextField: UITextField {}”,括号中是我原始帖子中的代码。但是在“border.borderColor = UIColor.darkGray.cgColor”行我收到一个错误,上面写着预期的声明。有什么建议吗?

标签: ios swift uitextfield swift4


【解决方案1】:

很简单,只需在任何类下输入此代码一次即可

    @IBDesignable
    open class customUITextField: UITextField {

        func setup() {
            let border = CALayer()
            let width = CGFloat(2.0)
        border.borderColor = UIColor.darkGray.cgColor
        border.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width, height: self.frame.size.height)
        border.borderWidth = width
        self.layer.addSublayer(border)
        self.layer.masksToBounds = true
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }
    required public init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)  
        setup()
    }
}

在“设置”功能中放置您想要的所有自定义设置。

然后返回设计并在您拥有的所有 TextField 中选择它并运行

【讨论】:

  • 谢谢,您的实现完美!我想知道为什么底部的边界线没有在我的项目中延伸整个宽度?它只占 UITextField 宽度的 3/4。
  • 请给我看你的代码,但是对于上面的代码,它会填充 100% 的文本字段,如照片中所示。
  • 我的代码与您提供的代码完全相同,这就是为什么它让我感到困惑。我为 UITextField 使用 cocoa touch 类创建了一个文件,然后准确地复制了代码,然后我在故事板中将它作为 UITextField 的类,但由于某种原因,它只进行了 3/4 .
  • 我不知道到底是什么问题,但请确保“宽度:self.frame.size.width”
  • 关闭 Xcode 并切换模拟器似乎已修复它。感谢您的帮助!
【解决方案2】:

这是一个例子:

class CustomTextField: UITextField {

    convenience init() {
        self.init(frame: .zero)
        let border = CALayer()
        let width = CGFloat(2.0)
        border.borderColor = UIColor.darkGray.cgColor
        border.frame = CGRect(x: 0, y: frame.size.height - width, width: frame.size.width, height: frame.size.height)

        border.borderWidth = width
        layer.addSublayer(border)
        layer.masksToBounds = true
    }

}

为了简化你的边框代码,你可以这样做:

layer.borderWidth = 2.0
layer.masksToBounds = true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多