Factory methods of UI elements
import UIKit
func makeButton( withText text: String ) -> UIButton {
let button = UIButton ( )
button. translatesAutoresizingMaskIntoConstraints = false
button. setTitle ( text, for: . normal)
button. titleLabel? . adjustsFontSizeToFitWidth = true
button. contentEdgeInsets = UIEdgeInsets ( top: 8 , left: 16 , bottom: 8 , right: 16 )
button. backgroundColor = . systemBlue
button. layer. cornerRadius = 8
return button
}
func makeLabel( withTitle title: String ) -> UILabel {
let label = UILabel ( )
label. translatesAutoresizingMaskIntoConstraints = false
label. text = title
label. textAlignment = . center
label. textColor = . black
label. numberOfLines = 0
label. adjustsFontSizeToFitWidth = true
return label
}
func makeHorizontalStackView( ) -> UIStackView {
let stack = UIStackView ( )
stack. translatesAutoresizingMaskIntoConstraints = false
stack. spacing = 8.0
return stack
}
func makeVerticalStackView( ) -> UIStackView {
let stack = UIStackView ( )
stack. translatesAutoresizingMaskIntoConstraints = false
stack. axis = . vertical
stack. spacing = 8.0
return stack
}
func makeSymbolButton( systemName: String , target: Any , selector: Selector ) -> UIButton {
let configuration = UIImage . SymbolConfiguration ( scale: . large)
let image = UIImage ( systemName: systemName, withConfiguration: configuration)
let button = UIButton ( )
button. translatesAutoresizingMaskIntoConstraints = false
button. addTarget ( target, action: selector, for: . primaryActionTriggered)
button. setImage ( image, for: . normal)
button. imageView? . contentMode = . scaleAspectFit
return button
}
func makeBarButtonItem( text: String , selector: Selector ) -> UIBarButtonItem {
let button = UIButton ( )
button. translatesAutoresizingMaskIntoConstraints = false
button. addTarget ( self , action: selector, for: . primaryActionTriggered)
let attributes = [
NSAttributedString . Key. font: UIFont . preferredFont ( forTextStyle: . largeTitle) . withTraits ( traits: [ . traitBold] ) ,
NSAttributedString . Key. foregroundColor: UIColor . label]
let attributedText = NSMutableAttributedString ( string: text, attributes: attributes)
button. setAttributedTitle ( attributedText, for: . normal)
button. contentEdgeInsets = UIEdgeInsets . init ( top: 0 , left: 0 , bottom: 0 , right: 16 )
let barButtonItem = UIBarButtonItem ( customView: button)
return barButtonItem
}