1

I implemented a UIPickerView in SwiftUI using UIViewRepresentable with following code:

struct DurationPickerView: UIViewRepresentable {
    
    func makeUIView(context: Context) -> UIPickerView {
        let picker = UIPickerView()
        picker.dataSource = context.coordinator
        picker.delegate = context.coordinator
        picker.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
        picker.setContentHuggingPriority(.defaultLow, for: .horizontal)
        
        return picker
    }
    
    func updateUIView(_ uiView: UIViewType, context: Context) {}
    
    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }
    
    class Coordinator: NSObject, UIPickerViewDelegate, UIPickerViewDataSource {
        
        let parent: DurationPickerView
        
        init(_ parent: DurationPickerView) {
            self.parent = parent
        }
        
        func numberOfComponents(in pickerView: UIPickerView) -> Int {
            return 6
        }
        
        func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
            if component == 0 {
                return 25
            }
            
            else if component == 1 {
                return 1
            }
            
            else if component == 2 {
                return 61
            }
            
            else if component == 3 {
                return 1
            }
            
            else if component == 4 {
                return 61
            }
            
            else if component == 5 {
                return 1
            }
            
            return 0
        }
        
        func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
            if component == 0 {
                return "\(row)"
            }
            
            else if component == 1 {
                return "Std."
            }
            
            else if component == 2 {
                return "\(row)"
            }
            
            else if component == 3 {
                return "Min."
            }
            
            else if component == 4 {
                return "\(row)"
            }
            
            else if component == 5 {
                return "Sek."
            }
            
            return ""
        }
    }
}

At the moment I'm using another pickerview row to describe the selectable rows. But how can I implement something like what I found here in an app? The row descriptions are not selectable like in my picker and it looks really better... enter image description here

I would be very happy for help

SwiftUI_Max
  • 201
  • 2
  • 6

0 Answers0