Với Swift 5.1 / iOS 13, bạn có thể tạo một lớp con của UIButton
để có một nút tùy chỉnh trông giống như nút viền tròn màu xanh trong ứng dụng iOS AppStore.
Đoạn mã sau đây cho biết cách quản lý đúng màu sắc (khi nút xuất hiện phía sau chế độ xem mờ của a UIAlertController
), màu của tiêu đề, màu nền được đánh dấu, kiểu của đường viền, màu của đường viền và nội dung chèn.
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)
}
}
Các hình ảnh dưới đây cho thấy cách nút tùy chỉnh sẽ xuất hiện ở trạng thái bình thường, khi hệ thống tinColor
được thay đổi (đằng sau chế độ xem mờ của a UIAlertController
) và ở highlighted
trạng thái.