JXSegmentedView icon indicating copy to clipboard operation
JXSegmentedView copied to clipboard

请问下有swiftui的demo吗

Open sakiraven opened this issue 2 years ago • 2 comments

超级喜欢您的PagingViewController 请问有swiftui的demo吗

sakiraven avatar Dec 04 '21 21:12 sakiraven

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()
    }
}

hstdt avatar Jul 07 '22 08:07 hstdt

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 样式

Lobooo avatar Jan 12 '23 07:01 Lobooo