Skip to content
Snippets Groups Projects
Commit 8dcf6a2f authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Add SwiftUI extension for CapsuleButton

parent 5d7d96fd
No related branches found
No related tags found
1 merge request!88HUD feature
import UIKit
import AppResources import AppResources
import Combine
import SwiftUI
import UIKit
public struct CapsuleButtonModel { public struct CapsuleButtonModel {
public var title: String public var title: String
...@@ -110,6 +112,10 @@ public final class CapsuleButton: UIButton { ...@@ -110,6 +112,10 @@ public final class CapsuleButton: UIButton {
required init?(coder: NSCoder) { nil } required init?(coder: NSCoder) { nil }
public override var intrinsicContentSize: CGSize {
CGSize(width: minimumWidth, height: height)
}
public func set( public func set(
style: CapsuleButtonStyle, style: CapsuleButtonStyle,
title: String, title: String,
...@@ -140,3 +146,62 @@ public final class CapsuleButton: UIButton { ...@@ -140,3 +146,62 @@ public final class CapsuleButton: UIButton {
setTitleColor(style.disabledTitleColor, for: .disabled) setTitleColor(style.disabledTitleColor, for: .disabled)
} }
} }
extension CapsuleButton {
public struct SwiftUIView: UIViewRepresentable {
public final class Coordinator {
init(view: CapsuleButton.SwiftUIView) {
self.view = view
}
var view: CapsuleButton.SwiftUIView
var cancellables = Set<AnyCancellable>()
}
public init(
height: CGFloat = 55.0,
minimumWidth: CGFloat = 200,
style: CapsuleButtonStyle,
title: String,
accessibility: String? = nil,
action: @escaping () -> Void
) {
self.height = height
self.minimumWidth = minimumWidth
self.style = style
self.title = title
self.accessibility = accessibility
self.action = action
}
let height: CGFloat
let minimumWidth: CGFloat
var style: CapsuleButtonStyle
var title: String
var accessibility: String?
var action: () -> Void
public func makeCoordinator() -> Coordinator {
Coordinator(view: self)
}
public func makeUIView(context: Context) -> CapsuleButton {
let uiView = CapsuleButton(
height: height,
minimumWidth: minimumWidth
)
uiView.publisher(for: .touchUpInside)
.sink { context.coordinator.view.action() }
.store(in: &context.coordinator.cancellables)
return uiView
}
public func updateUIView(_ uiView: CapsuleButton, context: Context) {
uiView.set(
style: style,
title: title,
accessibility: accessibility
)
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment