Изменение типов программно

#ios #swift

#iOS #swift

Вопрос:

Если у меня есть два пользовательских подкласса UITextField, например

 Class AlphaField: UITextField {
    self.keyboardType = UIKeyboardType.alphabet
}

Class NumberField: UITextField {
    self.keyboardType = UIKeyboardType.numberPad
}
  

Могу ли я затем назначить один из этих типов UITextField на основе инструкции в viewDidLoad? Например, что-то вроде:

 @IBOutlet weak var someTextField: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()

    if someBool {
        someTextField = AlphaField
    } else {
        someTextField = NumberField
    }
}
  

Я должен добавить, что это всего лишь пример. У меня есть причина для использования подклассов вместо простого изменения UIKeyboardType.

Комментарии:

1. используйте extension вместо

Ответ №1:

Конечно, это сработает. Конечно, вам нужно правильно их инициализировать:

 if someBool {
    someTextField = AlphaField(frame: someRect)
} else {
    someTextField = NumberField(frame: someRect)
}
self.view.addSubview(someTextField)
  

Это работает, поскольку someTextField является a UITextField и может указывать на любой подкласс UITextField .

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