Быстрое расширение UITextField Border - PullRequest
0 голосов
/ 16 сентября 2018

Я использую следующее расширение, чтобы нарисовать синие линии вокруг различных текстовых полей в различных контроллерах представления.

extension UITextField{
  open override func draw(_ rect: CGRect) {
      self.layer.cornerRadius = 9.0
      self.layer.borderWidth = 0.5
      self.layer.borderColor = UIColor(red: 0.0/255.0, green: 122.0/255.0, blue: 255.0/255.0, alpha: 1.0).cgColor
      self.layer.masksToBounds = true
    }
}

Это прекрасно работает, но теперь я хотел бы исключить некоторые конкретные текстовые поля из этого.
Например, @IBOutlet weak var dateTextField: UITextField! в классе контроллера представления MainMenuController должен иметь красные границы, в то время как другие текстовые поля в том же контроллере представления должны по-прежнему отображать синие границы.Есть ли способ ограничить расширение для определенных текстовых полей?Большое спасибо за вашу помощь в этом.

1 Ответ

0 голосов
/ 16 сентября 2018

Есть ли способ ограничить расширение

Нет.Так что это был плохой подход с самого начала.Вместо расширения используйте подкласс.

Кроме того, переопределение в расширении недопустимо.Это никогда не должно было работать вообще.

Кроме того, запрещается переопределять метод draw текстового поля.И даже если бы это было законно, было бы неправильно делать это, потому что вы не рисуете;draw вызывается для рисования много раз, но это единственное изменение, которое вы хотите сделать один раз в свойствах текстового поля.Когда вы пишете свой подкласс, переопределите инициализаторы текстового поля.

Итак, давайте предположим, что все ваши текстовые поля взяты из раскадровки (как ваш dateTextField. Тогда вы бы написали:

class BorderedTextField : UITextField {
    required init?(coder aDecoder: NSCoder) {
        super.init(coder:aDecoder)
        self.layer.cornerRadius = 9.0
        self.layer.borderWidth = 0.5
        self.layer.borderColor = UIColor(red: 0.0/255.0, green: 122.0/255.0, blue: 255.0/255.0, alpha: 1.0).cgColor
        self.layer.masksToBounds = true
    }
}

Затем используйте инспектор удостоверений в раскадровке, чтобы превратить текстовое поле из UITextField в BorderedTextField.

Вы также можете использовать атрибут @IBInspectable, чтобы сделать возможным установить цвет границы в качестве параметра в раскадровкесамо по себе. Но это выходит за рамки вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...