- April 27, 2024
- Mins Read
Maintainer(s): @nickm01 @pmacro @aryamansharda
Simple and customizable button in Swift.
Cocoapods
pod ‘SwiftyButton’
Carthage
github ‘TakeScoop/SwiftyButton’
let button = FlatButton()
button.color = .cyan
button.highlightedColor = .blue
button.cornerRadius = 5
let button = PressableButton()
button.colors = .init(button: .cyan, shadow: .blue)
button.shadowHeight = 5
button.cornerRadius = 5
Here is a list of all the properties that you can modify. Those are all editable directly from Interface Builder. See FlatButton.Defaults
or PressableButton.Defaults
to set defaults for those properties.
button.color = .cyan
button.highlightedColor = .cyan
button.selectedColor = .blue
button.disabledButtonColor = .gray
button.cornerRadius = 8
button.colors = .init(button: .cyan, shadow: .blue)
button.disabledColors = .init(button: .gray, shadow: .darkGray)
button.shadowHeight = 10
button.cornerRadius = 8
button.depth = 0.5 // In percentage of shadowHeight
Add a UIButton
as usual, then:
FlatButton/PressableButton
, and that the module is set to SwiftyButton
Custom
You can set defaults that will be applied for any new instance of SwiftyButton by modifying the FlatButton.Defaults
or PressableButton.Defaults
structure:
FlatButton.Defaults.color = .cyan
PressableButton.Defaults.cornerRadius = 8
…
Use CustomPressableButton
to add custom content in a Swifty Button.
This is a subclass of SwiftyButton
that exposes a content view that moves when the button state changes. All you have to do is add your views inside button.contentView
and setup layout constraints relative to this view.
pod `SwiftyButton/CustomContent`
Here is how you would create a button similar to the one above (here we used PureLayout for constraints):
let button = CustomPressableButton()
let indicator = UIActivityIndicatorView(activityIndicatorStyle: .white)
button.contentView.addSubview(indicator)
indicator.autoPinEdgesToSuperviewEdges(with: UIEdgeInsets(top: 10, left: 15, bottom: 10, right: 0), excludingEdge: .right)
indicator.startAnimating()
let label = UILabel()
button.contentView.addSubview(label)
label.autoPinEdgesToSuperviewEdges(with: UIEdgeInsets(top: 10, left: 0, bottom: 10, right: 10), excludingEdge: .left)
label.autoPinEdge(.left, to: .right, of: indicator, withOffset: 10)
label.text = “Loading…”
label.textColor = .white
PressableButton
only works with plain colors (no alpha / transparency) because of the way its background image is rendered. See #2PressableButton
manages title and image insets automatically (titleEdgeInsets
and imageEdgeInsets
). See #5
top
and bottom
will be overridden.left
and right
.Look at the Examples folder to see more button examples.
Horizon SDK is a state of the art real-time video recording / photo shooting iOS library. Some of the features ...