Open sakiraven opened 2 years ago
import SwiftUI
import JXSegmentedView
struct JXSegmentedSwiftUIView: UIViewRepresentable {
internal init(selectedIndex: Binding<Int>, segmentedDataSource: JXSegmentedViewDataSource, indicators: [UIView & JXSegmentedIndicatorProtocol]) {
self._selectedIndex = selectedIndex
self.segmentedDataSource = segmentedDataSource
self.indicators = indicators
}
@Binding var selectedIndex: Int
var segmentedDataSource: JXSegmentedViewDataSource
var indicators: [UIView & JXSegmentedIndicatorProtocol]
let segmentedView = JXSegmentedView()
func updateUIView(_ uiView: JXSegmentedView, context: Context) {
uiView.defaultSelectedIndex = selectedIndex
}
func makeUIView(context: Context) -> JXSegmentedView {
segmentedView.delegate = context.coordinator
segmentedView.defaultSelectedIndex = selectedIndex
segmentedView.dataSource = segmentedDataSource
segmentedView.indicators = indicators
return segmentedView
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator: NSObject, JXSegmentedViewDelegate {
var parent: JXSegmentedSwiftUIView
init(_ parent: JXSegmentedSwiftUIView) {
self.parent = parent
}
func segmentedView(_ segmentedView: JXSegmentedView, didSelectedItemAt index: Int) {
parent.selectedIndex = index
}
}
}
struct JXSegmentedSwiftUIView_Previews: PreviewProvider {
struct Preview: View {
@State private var selectedIndex: Int = 0
var body: some View {
JXSegmentedSwiftUIView(selectedIndex: $selectedIndex, segmentedDataSource: segmentedDataSource, indicators: indicators)
.frame(height: 47)
}
var segmentedDataSource: JXSegmentedTitleDataSource {
let segmentedDataSource = JXSegmentedTitleDataSource()
segmentedDataSource.titles = ["1", "2"]
segmentedDataSource.isTitleColorGradientEnabled = true
return segmentedDataSource
}
var indicators: [UIView & JXSegmentedIndicatorProtocol] {
let indicator = JXSegmentedIndicatorLineView()
indicator.indicatorWidth = JXSegmentedViewAutomaticDimension
indicator.lineStyle = .lengthen
return [indicator]
}
}
static var previews: some View {
Preview()
}
}
import SwiftUI import JXSegmentedView struct JXSegmentedSwiftUIView: UIViewRepresentable { internal init(selectedIndex: Binding<Int>, segmentedDataSource: JXSegmentedViewDataSource, indicators: [UIView & JXSegmentedIndicatorProtocol]) { self._selectedIndex = selectedIndex self.segmentedDataSource = segmentedDataSource self.indicators = indicators } @Binding var selectedIndex: Int var segmentedDataSource: JXSegmentedViewDataSource var indicators: [UIView & JXSegmentedIndicatorProtocol] let segmentedView = JXSegmentedView() func updateUIView(_ uiView: JXSegmentedView, context: Context) { uiView.defaultSelectedIndex = selectedIndex } func makeUIView(context: Context) -> JXSegmentedView { segmentedView.delegate = context.coordinator segmentedView.defaultSelectedIndex = selectedIndex segmentedView.dataSource = segmentedDataSource segmentedView.indicators = indicators return segmentedView } func makeCoordinator() -> Coordinator { Coordinator(self) } class Coordinator: NSObject, JXSegmentedViewDelegate { var parent: JXSegmentedSwiftUIView init(_ parent: JXSegmentedSwiftUIView) { self.parent = parent } func segmentedView(_ segmentedView: JXSegmentedView, didSelectedItemAt index: Int) { parent.selectedIndex = index } } } struct JXSegmentedSwiftUIView_Previews: PreviewProvider { struct Preview: View { @State private var selectedIndex: Int = 0 var body: some View { JXSegmentedSwiftUIView(selectedIndex: $selectedIndex, segmentedDataSource: segmentedDataSource, indicators: indicators) .frame(height: 47) } var segmentedDataSource: JXSegmentedTitleDataSource { let segmentedDataSource = JXSegmentedTitleDataSource() segmentedDataSource.titles = ["1", "2"] segmentedDataSource.isTitleColorGradientEnabled = true return segmentedDataSource } var indicators: [UIView & JXSegmentedIndicatorProtocol] { let indicator = JXSegmentedIndicatorLineView() indicator.indicatorWidth = JXSegmentedViewAutomaticDimension indicator.lineStyle = .lengthen return [indicator] } } static var previews: some View { Preview() } }
NaviSegmentedControlViewController的 SwiftUI 版要如何写呢,能否有个完全的SwiftUI版,比如好可以支持SwiftUI的Picker()segmented 样式
超级喜欢您的PagingViewController 请问有swiftui的demo吗