Должен ли я перенести UI-Related в расширение внутри отдельного класса? - PullRequest
0 голосов
/ 07 августа 2020

Я новичок в Swift и хочу знать, следует ли мне переносить связанные с пользовательским интерфейсом файлы в расширение внутри отдельного класса или нет? Например, я хочу переместить некоторые из моих пользовательских макетов UITextfield в расширение UIViewController внутри другого файла .swift, а затем я могу вызвать этот метод в моем ViewController.swift всякий раз, когда мне это нужно, это хорошая практика, чтобы избежать (Massive ViewController)?

Будем признательны за ваши предложения, спасибо!

1 Ответ

0 голосов
/ 07 августа 2020

Я использовал множество похожих ярлыков, UIViews и текстовых полей в своем проекте. Чтобы сделать код лучше и ускорить процесс, я добавил многоразовые элементы пользовательского интерфейса в отдельную папку Extensions.swift. Например:

class Textfield: UITextField {
init(placeholder: String, type: UIKeyboardType, returnKey: UIReturnKeyType, capitalization: UITextAutocapitalizationType, align: NSTextAlignment, borderC: UIColor, textC: UIColor) {
    super.init(frame: .zero)
    self.placeholder = placeholder
    self.keyboardType = type
    self.returnKeyType = returnKey
    self.autocapitalizationType = capitalization
    self.borderStyle = .none
    self.textAlignment = align
    self.backgroundColor = .clear
    self.font = UIFont(name: nexaBold, size: 25)
    self.textColor = textC
    self.layer.borderWidth = 1
    self.layer.cornerRadius = 12
    self.layer.borderColor = borderC.cgColor
    self.translatesAutoresizingMaskIntoConstraints = false
    if align == .left {
        let padding = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: 0))
        self.leftView = padding
        self.leftViewMode = .always
    }
}
required init?(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

}

И в любом месте проекта я могу использовать его:

private nameField = TextField("Enter Name:", .default, .done.... etc)
...