Создание UI кодом


#1

Вопрос к опытным разработчикам.
Каким образом можно “упростить” VC при написании UI кодом, т.к при большом кол-ве элементов VC превращается в massive VC? Спасибо.


#2

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


#3

а можно немного кода для примера?


#4
struct UIFactory {
    
    struct Utility {
        
        static func box(color: NSColor = .white, superview: NSView? = nil) -> NSBox {
            let box = NSBox(frame: .zero)
            box.boxType = .custom
            box.borderColor = .clear
            box.titlePosition = .noTitle
            box.fillColor = color
            superview?.addSubview(box)
            return box
        }
        
        static func popupButton(itemTitles: [String], superview: NSView? = nil) -> NSPopUpButton {
            let popup = NSPopUpButton(frame: .zero)
            popup.removeAllItems()
            popup.addItems(withTitles: itemTitles)
            popup.selectItem(at: 0)
            popup.resetTitleColor()
            superview?.addSubview(popup)
            return popup
        }
        
        static func dot(color: NSColor, diameter: CGFloat = 6, superview: NSView? = nil) -> MRView {
            let view = NSView(superview: superview)
            view.layer!.cornerRadius = diameter * 0.5
            view.backgroundColor = color
            constrain(view) { view in
                view.width == diameter
                view.height == view.width
            }
            return view
        }
        
    }
    
}

Вот код примера фабрики на пару контролов. После просто инициализация в контроллере и все настроено как положено


#5

супервью передается в момент инициализации как self.view


#6

спасибо

а NS элементы это что то вроде внутренних библиотек в компании?


#7

NS -> NextStep. Чтото вроде базовых классов Apple, только для десктопа. Но принцип один и тот же


#8

а если создать отдельный UIVIew класс, добавить на него весь UI и потом добавить только эту вью на вьюконтр?


#9

Можно и так! Вы же разработчик


#10

это да, можно как угодно))) я интересуюсь как правильнее, вы ж опытный)


#11

У каждого свое понимание правильного. В моем случае, я бы делал фабрику!


#12

Можно с помощью билдера https://www.swiftbysundell.com/articles/using-the-builder-pattern-in-swift/