Create Segment Control in SwiftUI
SwiftUI’s Picker
can also be used to create segmented controls equivalent to UISegmentedControl
from UIKit, although it needs to be bound to some state and you must ensure to give each segment a tag so it can be identified. Segments can be text or pictures; anything else will silently fail.
As an example, this creates a segmented control that works with a favoriteNumber
state property, and adds a text view below that shows whichever value was selected:
import SwiftUI
struct ContentView: View {
@State private var favoriteNumber = 0
var numbers = ["One", "Two", "Three"]
init() {
UISegmentedControl.appearance().selectedSegmentTintColor = .red
UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.white], for: .selected)
UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.gray], for: .normal)
}
var body: some View {
VStack {
Picker(selection: $favoriteNumber, label: Text("What is your favorite color?")) {
ForEach(0..<numbers.count) { index in
Text(self.numbers[index]).tag(index)
}
}.pickerStyle(SegmentedPickerStyle())
.padding()
Text("Value: \(numbers[favoriteNumber])")
.foregroundColor(Color.pink)
.font(.largeTitle)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Comments
Post a Comment