自定义 UITextField class 仅应用于第一个文本字段
Custom UITextField class only applied to first text field
我在 Swift 中制作了我的第一个自定义 class,我想将它用于我的应用程序中的文本字段。问题是它只适用于视图控制器中的第一个文本字段,class 不适用于第二个(第二个没有圆角,默认占位符颜色等)。我仔细检查了故事板中两个文本字段的正确 "custom class" 设置。为什么 class 不应用于两个字段?似乎有一个简单的解决方案,但我还没有找到任何...
这里是 class:
import UIKit
class RoundedUITextField: UITextField {
override init(frame: CGRect) {
super.init(frame: frame)
self.setAttributes()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
func setAttributes() {
self.layer.cornerRadius = 20.0
let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: 15, height: self.frame.height))
self.leftView = paddingView
self.leftViewMode = UITextFieldViewMode.always
self.textColor = UIColor.white
self.alpha = 0.7
let str = NSAttributedString(string: (self.placeholder)!, attributes: [NSForegroundColorAttributeName:UIColor.white])
self.attributedPlaceholder = str
}
}
这是视图控制器代码:
class LogInViewController: UIViewController {
@IBOutlet weak var password: RoundedUITextField!
@IBOutlet weak var userName: RoundedUITextField!
override func viewDidLoad() {
super.viewDidLoad()
userName.setAttributes()
// Do any additional setup after loading the view.
}
我现在发现问题出在 "setAttributes",我以为 class 中设置的属性,但实际上它们只在其中之一的 viewDidLoad 中设置(我把它一开始忘了删除它)...我希望在 class 的 "init" 中为所有字段完成此操作...
将您的 self.setAttributes()
放入您的 awakeFromNib
方法并将其从 init(frame: CGRect)
中删除
override func awakeFromNib() {
super.awakeFromNib()
self.setAttributes()
}
您的自定义 class 代码将像这样
import UIKit
class RoundedUITextField: UITextField {
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func awakeFromNib() {
super.awakeFromNib()
self.setAttributes()
}
func setAttributes() {
self.layer.cornerRadius = 20.0
let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: 15, height: self.frame.height))
self.leftView = paddingView
self.leftViewMode = UITextFieldViewMode.always
self.textColor = UIColor.white
self.alpha = 0.7
let str = NSAttributedString(string: (self.placeholder)!, attributes: [NSForegroundColorAttributeName:UIColor.white])
self.attributedPlaceholder = str
}
}
希望对您有所帮助
我在 Swift 中制作了我的第一个自定义 class,我想将它用于我的应用程序中的文本字段。问题是它只适用于视图控制器中的第一个文本字段,class 不适用于第二个(第二个没有圆角,默认占位符颜色等)。我仔细检查了故事板中两个文本字段的正确 "custom class" 设置。为什么 class 不应用于两个字段?似乎有一个简单的解决方案,但我还没有找到任何...
这里是 class:
import UIKit
class RoundedUITextField: UITextField {
override init(frame: CGRect) {
super.init(frame: frame)
self.setAttributes()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
func setAttributes() {
self.layer.cornerRadius = 20.0
let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: 15, height: self.frame.height))
self.leftView = paddingView
self.leftViewMode = UITextFieldViewMode.always
self.textColor = UIColor.white
self.alpha = 0.7
let str = NSAttributedString(string: (self.placeholder)!, attributes: [NSForegroundColorAttributeName:UIColor.white])
self.attributedPlaceholder = str
}
}
这是视图控制器代码:
class LogInViewController: UIViewController {
@IBOutlet weak var password: RoundedUITextField!
@IBOutlet weak var userName: RoundedUITextField!
override func viewDidLoad() {
super.viewDidLoad()
userName.setAttributes()
// Do any additional setup after loading the view.
}
我现在发现问题出在 "setAttributes",我以为 class 中设置的属性,但实际上它们只在其中之一的 viewDidLoad 中设置(我把它一开始忘了删除它)...我希望在 class 的 "init" 中为所有字段完成此操作...
将您的 self.setAttributes()
放入您的 awakeFromNib
方法并将其从 init(frame: CGRect)
中删除
override func awakeFromNib() {
super.awakeFromNib()
self.setAttributes()
}
您的自定义 class 代码将像这样
import UIKit
class RoundedUITextField: UITextField {
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func awakeFromNib() {
super.awakeFromNib()
self.setAttributes()
}
func setAttributes() {
self.layer.cornerRadius = 20.0
let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: 15, height: self.frame.height))
self.leftView = paddingView
self.leftViewMode = UITextFieldViewMode.always
self.textColor = UIColor.white
self.alpha = 0.7
let str = NSAttributedString(string: (self.placeholder)!, attributes: [NSForegroundColorAttributeName:UIColor.white])
self.attributedPlaceholder = str
}
}
希望对您有所帮助