我可以创建一个所有View Controller都可以访问的类吗

时间:2019-11-18 12:25:54

标签: ios swift

我正在创建具有多个视图控制器的应用程序,每个视图控制器都包含用于获取用户输入的文本字段。因此,我想分别为每个视图控制器自定义textFields,例如边框半径,边框颜色等。我希望一个视图控制器中的textFields属性与另一视图控制器不同。

是否可以在(swift File)中创建带有自定义方法的类,以便每个视图控制器都可以使用这些方法,并且可以修改该方法中的值?如果可以的话?

我能够使用以下方法在一个视图控制器中自定义textField:

extension UIColor {
    convenience init(red: Int, green: Int, blue: Int) {
        assert(red >= 0 && red <= 255, "Invalid red component")
        assert(green >= 0 && green <= 255, "Invalid green component")
        assert(blue >= 0 && blue <= 255, "Invalid blue component")
        self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1.0)
    }

    convenience init(netHex:Int) {
        self.init(red:(netHex >> 16) & 0xff, green:(netHex >> 8) & 0xff, blue:netHex & 0xff)
    }
}

extension UITextField{
    open override func draw(_ rect: CGRect) {
        let greenish = UIColor.init(netHex: 0x85b51)
        self.layer.cornerRadius = 12.0
        self.layer.borderWidth = 1.0
        self.layer.borderColor = greenish.cgColor
        self.layer.masksToBounds = true    
    }
}

当我将代码复制到另一个视图控制器时,可以进行修改。我收到错误信息

重新声明'init(netHex :)',无效重新声明'init(red:green:blue:)'

我是ios应用程序开发的新手,我一直在做大量研究以了解发生了什么。我将不胜感激,并提供任何指导。谢谢

3 个答案:

答案 0 :(得分:2)

我建议您根据需要在单独的文件中添加所有扩展名,并在功能参数中添加需要更改的值(例如边框宽度或颜色)

通常,足以创建一个扩展,并且该扩展将在所有项目中可用

答案 1 :(得分:1)

您无需复制此类扩展名,该扩展名在您所有的应用组件中均应有效。因此,只需在第二个视图控制器中调用要使用的方法即可。通常,将UIKit组件或其他框架组件的扩展放在单独的文件中,而不是在视图控制器swift文件中,这样才更容易找到。例如,您可以使用文件名“ UIColor-extensions.swift”,并将所有扩展名放入其中。

答案 2 :(得分:0)

如果要创建可在整个应用程序中使用的自定义视图,建议使用@ibdesignable和@ibinspectable。