自定义UITextField类仅应用于第一个文本字段

时间:2017-08-13 09:38:25

标签: ios swift xcode xcode-storyboard

我已经在Swift中创建了我的第一个自定义类,我想将它用于我的应用程序中的文本字段。问题是它只适用于视图控制器中的第一个文本字段,该类不适用于第二个文本字段(第二个没有圆角,默认占位符颜色等)。我仔细检查了两个文本字段的故事板中是否设置了正确的“自定义类”。为什么这个类不适用于这两个领域?看起来像一个简单的解决方案,但我没有发现任何......

这是班级:

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”中,我认为在类中设置的属性,但它们实际上只在viewDidLoad中为其中一个设置(我把它放在那里开始并忘记删除它... ...我希望在所有字段的类的“init”中完成...

1 个答案:

答案 0 :(得分:1)

self.setAttributes()放入awakeFromNib方法并将其从init(frame: CGRect)

中删除
override func awakeFromNib() {
    super.awakeFromNib()
    self.setAttributes()
}

您的自定义类代码将是这样的

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



  }

}

希望这有帮助