0

我为 UITextField 创建了扩展。我需要 UITextView 的相同扩展名。如何使此扩展可用于所有其他视图?

我的扩展代码:

extension UITextField {

    func addTopBorderWithColor(color: UIColor, height: CGFloat) {
        let border = CALayer()
        border.backgroundColor = color.CGColor
        border.frame = CGRectMake(0, 0, self.frame.size.width, height)
        self.layer.addSublayer(border)
    }

    func addRightBorderWithColor(color: UIColor, height: CGFloat) {
        let border = CALayer()
        border.backgroundColor = color.CGColor
        border.frame = CGRectMake(self.frame.size.width - height, 0, height, self.frame.size.height)
        self.layer.addSublayer(border)
    }

    func addBottomBorderWithColor(color: UIColor, height: CGFloat) {
        let border = CALayer()
        border.backgroundColor = color.CGColor
        border.frame = CGRectMake(0, self.frame.size.height - height, self.frame.size.width, height)
        self.layer.addSublayer(border)
    }

    func addLeftBorderWithColor(color: UIColor, height: CGFloat) {
        let border = CALayer()
        border.backgroundColor = color.CGColor
        border.frame = CGRectMake(0, 0, height, self.frame.size.height)
        self.layer.addSublayer(border)
    }
}
4

2 回答 2

1

如果您只想扩展几个类,您可以定义一个协议并在协议中提供默认实现,然后使用新协议扩展类。这是一个可以在操场上运行的简单示例:

protocol foo {
    func bar() -> String;
}

extension foo {
    func bar() -> String {
        return "bar"
    }
}

extension Float: foo {}
extension Int: foo {}


let i = 12
print(i.bar())

let f:Float = 1.0
print (f.bar())
于 2015-12-04T17:27:27.393 回答
1

您应该只为UIView. 随着其他类 ( UITextField, UITextView, UILabel, ...) 的扩展UIView,它们都应该具有可用的功能。

注意:这要求功能适用于 UIView 并且不包含特定操作(例如访问仅在 中可用的属性UITextView)。

于 2015-12-03T12:12:25.003 回答