Mit Swift 5.1 / iOS 13 können Sie eine Unterklasse von erstellen UIButton
, um eine benutzerdefinierte Schaltfläche zu erhalten, die wie die blaue Schaltfläche mit abgerundeten Rändern in der iOS AppStore-App aussieht.
Der folgende Code zeigt, wie die Farbtonfarbe (wenn die Schaltfläche hinter der abgeblendeten Ansicht von a angezeigt wird UIAlertController
), die Farbe des Titels, die hervorgehobene Hintergrundfarbe, der Stil des Rahmens, die Farbe des Rahmens und die Inhaltseinfügungen ordnungsgemäß verwaltet werden.
CustomButton.swift:
import UIKit
class CustomButton: UIButton {
override init(frame: CGRect) {
super.init(frame: frame)
setProperties()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setProperties()
}
func setProperties() {
layer.borderColor = tintColor?.cgColor
layer.borderWidth = 1
layer.cornerRadius = 4
setTitleColor(tintColor, for: .normal)
setTitleColor(.white, for: .highlighted)
contentEdgeInsets = UIEdgeInsets(top: 5, left: 10, bottom: 5, right: 10)
}
override var isHighlighted: Bool {
didSet {
backgroundColor = super.isHighlighted ? tintColor : nil
}
}
override func tintColorDidChange() {
super.tintColorDidChange()
layer.borderColor = tintColor?.cgColor
setTitleColor(tintColor, for: .normal)
}
}
ViewController.swift:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .secondarySystemBackground
let button = CustomButton()
button.setTitle("Normal", for: .normal)
button.setTitle("Highlighted", for: .highlighted)
button.addTarget(self, action: #selector(presentAlert(_:)), for: .touchUpInside)
view.addSubview(button)
button.translatesAutoresizingMaskIntoConstraints = false
button.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
button.topAnchor.constraint(equalTo: view.topAnchor, constant: 100).isActive = true
}
@objc func presentAlert(_ sender: UIButton) {
let alertController = UIAlertController(title: "Title", message: "Message", preferredStyle: .alert)
let alertAction = UIAlertAction(title: "OK", style: .default)
alertController.addAction(alertAction)
present(alertController, animated: true, completion: nil)
}
}
Die folgenden Bilder zeigen, wie die benutzerdefinierte Schaltfläche im Normalzustand angezeigt wird, wenn das System tinColor
geändert wird (hinter der abgeblendeten Ansicht von a UIAlertController
) und im highlighted
Status.