我正在创建具有多个视图控制器的应用程序,每个视图控制器都包含用于获取用户输入的文本字段。因此,我想分别为每个视图控制器自定义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应用程序开发的新手,我一直在做大量研究以了解发生了什么。我将不胜感激,并提供任何指导。谢谢
答案 0 :(得分:2)
我建议您根据需要在单独的文件中添加所有扩展名,并在功能参数中添加需要更改的值(例如边框宽度或颜色)
通常,足以创建一个扩展,并且该扩展将在所有项目中可用
答案 1 :(得分:1)
您无需复制此类扩展名,该扩展名在您所有的应用组件中均应有效。因此,只需在第二个视图控制器中调用要使用的方法即可。通常,将UIKit组件或其他框架组件的扩展放在单独的文件中,而不是在视图控制器swift文件中,这样才更容易找到。例如,您可以使用文件名“ UIColor-extensions.swift”,并将所有扩展名放入其中。
答案 2 :(得分:0)
如果要创建可在整个应用程序中使用的自定义视图,建议使用@ibdesignable和@ibinspectable。