What is a UIPickerView used for in iOS development?
A UIPickerView lets users select a value from a list by spinning a wheel-like interface. It's like choosing an option from a rotating menu.
Click to reveal answer
beginner
How does UIDatePicker help users in an app?
UIDatePicker lets users pick dates and times easily using a familiar scrolling wheel or calendar style. It simplifies entering date/time information.
Click to reveal answer
intermediate
Which protocol must a class conform to for providing data to a UIPickerView?
The class must conform to <code>UIPickerViewDataSource</code> to provide the number of components and rows, and <code>UIPickerViewDelegate</code> to provide the content and handle selection.
Click to reveal answer
intermediate
What property of UIDatePicker controls whether it shows date, time, or both?
The datePickerMode property controls the display mode. It can be set to .date, .time, or .dateAndTime.
Click to reveal answer
intermediate
How can you respond when a user changes the selected value in a UIPickerView?
Implement the delegate method pickerView(_:didSelectRow:inComponent:). This method is called whenever the user picks a new row.
Click to reveal answer
Which method provides the number of rows in a UIPickerView component?
ApickerView(_:didSelectRow:inComponent:)
BpickerView(_:titleForRow:forComponent:)
CpickerView(_:numberOfRowsInComponent:)
DnumberOfComponents(in:)
✗ Incorrect
The method pickerView(_:numberOfRowsInComponent:) tells the picker how many rows to show in each component.
What property of UIDatePicker sets it to show only time?
Amode = .date
Bmode = .dateAndTime
CpickerMode = .time
DdatePickerMode = .time
✗ Incorrect
Setting datePickerMode to .time makes the UIDatePicker show only the time selection.
Which delegate method is called when a user selects a new row in UIPickerView?
ApickerView(_:didSelectRow:inComponent:)
BpickerView(_:titleForRow:forComponent:)
CpickerView(_:numberOfRowsInComponent:)
DpickerView(_:viewForRow:forComponent:reusing:)
✗ Incorrect
pickerView(_:didSelectRow:inComponent:) is called when the user changes the selection.
How many components does a basic UIPickerView usually have?
AThree
BOne
CTwo
DZero
✗ Incorrect
Most simple pickers have one component, like a single spinning wheel.
Which class is used to let users pick dates and times in iOS?
AUIDatePicker
BUIPickerView
CUITableView
DUICollectionView
✗ Incorrect
UIDatePicker is the built-in control for selecting dates and times.
Explain how to set up a UIPickerView to show a list of options and respond when the user picks one.
Think about how you tell the picker what to show and how to react when the user spins the wheel.
You got /4 concepts.
Describe how to configure a UIDatePicker to let users pick only a date, and how to get the selected date.
Focus on the mode property and how to listen for changes.
You got /3 concepts.
Practice
(1/5)
1. What is the primary purpose of a Picker in SwiftUI?
easy
A. To input text from the keyboard
B. To display a calendar view for date selection
C. To let users select a value from a list of options
D. To show an alert message
Solution
Step 1: Understand Picker functionality
A Picker is designed to let users choose from multiple options easily.
Step 2: Compare with other UI elements
DatePicker is for dates, TextField is for text input, Alert is for messages.
Final Answer:
To let users select a value from a list of options -> Option C
Quick Check:
Picker = select from list [OK]
Hint: Picker = choose from list, DatePicker = choose date [OK]
Common Mistakes:
Confusing Picker with DatePicker
Thinking Picker inputs text
Assuming Picker shows alerts
2. Which of the following is the correct syntax to create a simple Picker in SwiftUI?
easy
A. Picker { Text("One") } selection: $choice label: Text("Select")
B. Picker(selection: $choice) { Text("One") } label: { Text("Select") }
C. Picker(label: Text("Select"), selection: $choice) { Text("One") }
D. Picker(selection: choice) { Text("One") } label: Text("Select")
Solution
Step 1: Recall Picker initializer syntax
The correct syntax uses named parameters: selection binding first, then content closure, then label closure.
Step 2: Check each option
Picker(selection: $choice) { Text("One") } label: { Text("Select") } matches the correct syntax with $choice binding and label closure.
Hint: Picker needs selection binding with $ and label closure [OK]
Common Mistakes:
Omitting $ for binding
Wrong parameter order
Using non-closure label
3. Given this SwiftUI code snippet, what will be displayed when the user selects "Banana"?
struct ContentView: View {
@State private var fruit = "Apple"
var fruits = ["Apple", "Banana", "Cherry"]
var body: some View {
VStack {
Picker("Select Fruit", selection: $fruit) {
ForEach(fruits, id: \.self) { fruit in
Text(fruit)
}
}
Text("You chose: \(fruit)")
}
}
}
medium
A. You chose: Banana
B. You chose: "" (empty string)
C. You chose: Cherry
D. You chose: Apple
Solution
Step 1: Understand state binding in Picker
The Picker binds to @State variable 'fruit', updating it when user selects an option.
Step 2: User selects "Banana"
The state variable 'fruit' changes to "Banana", so the Text below shows "You chose: Banana".
Final Answer:
You chose: Banana -> Option A
Quick Check:
Picker selection updates state = displayed text [OK]
Hint: Picker updates bound state, Text shows updated value [OK]
Common Mistakes:
Ignoring state update on selection
Confusing initial value with selected value
Not using id: \.self in ForEach
4. Identify the error in this DatePicker code snippet:
@State private var selectedDate = Date()
var body: some View {
DatePicker("Pick a date", selection: selectedDate, displayedComponents: .date)
}
medium
A. DatePicker cannot display only date component
B. selectedDate must be a String, not Date
C. Label parameter must be omitted
D. Missing $ before selectedDate in selection binding
Solution
Step 1: Check binding syntax for DatePicker
The selection parameter requires a binding, so it must be $selectedDate, not selectedDate.
Step 2: Verify other parameters
Displaying only date is valid, label is required, and selectedDate is correctly a Date type.
Final Answer:
Missing $ before selectedDate in selection binding -> Option D
Quick Check:
Binding needs $ prefix [OK]
Hint: Always use $ for binding state variables [OK]
Common Mistakes:
Forgetting $ in binding
Using wrong data type for selection
Misunderstanding displayedComponents usage
5. You want to create a SwiftUI view where users pick a time and a fruit from a list. Which code snippet correctly combines a DatePicker for time and a Picker for fruits with state variables?
hard
A. struct ContentView: View {
@State private var time = Date()
@State private var fruit = "Apple"
let fruits = ["Apple", "Banana"]
var body: some View {
VStack {
DatePicker(selection: $time, displayedComponents: .hourAndMinute) { Text("Select Time") }
Picker(selection: $fruit) {
ForEach(fruits, id: \.self) { Text($0) }
} label: { Text("Select Fruit") }
}
}
}
B. struct ContentView: View {
@State private var time = Date()
@State private var fruit = "Apple"
let fruits = ["Apple", "Banana"]
var body: some View {
VStack {
DatePicker("Select Time", selection: time, displayedComponents: .hourAndMinute)
Picker("Select Fruit", selection: fruit) {
ForEach(fruits, id: \.self) { Text($0) }
}
}
}
}
C. struct ContentView: View {
@State private var time = Date()
@State private var fruit = "Apple"
let fruits = ["Apple", "Banana"]
var body: some View {
VStack {
DatePicker("Select Time", selection: time, displayedComponents: .hourAndMinute)
Picker("Select Fruit", selection: $fruit) {
ForEach(fruits, id: \.self) { Text($0) }
}
}
}
}
D. struct ContentView: View {
@State private var time = Date()
@State private var fruit = "Apple"
let fruits = ["Apple", "Banana"]
var body: some View {
VStack {
DatePicker("Select Time", selection: $time)
Picker("Select Fruit", selection: $fruit) {
ForEach(fruits, id: \.self) { Text($0) }
}
}
}
}
Solution
Step 1: Check DatePicker syntax with label closure
struct ContentView: View {
@State private var time = Date()
@State private var fruit = "Apple"
let fruits = ["Apple", "Banana"]
var body: some View {
VStack {
DatePicker(selection: $time, displayedComponents: .hourAndMinute) { Text("Select Time") }
Picker(selection: $fruit) {
ForEach(fruits, id: \.self) { Text($0) }
} label: { Text("Select Fruit") }
}
}
} uses DatePicker with selection binding and label closure, which is valid syntax.
Step 2: Check Picker syntax with label closure
Picker in struct ContentView: View {
@State private var time = Date()
@State private var fruit = "Apple"
let fruits = ["Apple", "Banana"]
var body: some View {
VStack {
DatePicker(selection: $time, displayedComponents: .hourAndMinute) { Text("Select Time") }
Picker(selection: $fruit) {
ForEach(fruits, id: \.self) { Text($0) }
} label: { Text("Select Fruit") }
}
}
} uses selection binding and label closure correctly, with ForEach and id: \.self.
Step 3: Verify other options
struct ContentView: View {
@State private var time = Date()
@State private var fruit = "Apple"
let fruits = ["Apple", "Banana"]
var body: some View {
VStack {
DatePicker("Select Time", selection: time, displayedComponents: .hourAndMinute)
Picker("Select Fruit", selection: $fruit) {
ForEach(fruits, id: \.self) { Text($0) }
}
}
}
} lacks $ for DatePicker selection binding, struct ContentView: View {
@State private var time = Date()
@State private var fruit = "Apple"
let fruits = ["Apple", "Banana"]
var body: some View {
VStack {
DatePicker("Select Time", selection: time, displayedComponents: .hourAndMinute)
Picker("Select Fruit", selection: fruit) {
ForEach(fruits, id: \.self) { Text($0) }
}
}
}
} lacks $ for bindings, struct ContentView: View {
@State private var time = Date()
@State private var fruit = "Apple"
let fruits = ["Apple", "Banana"]
var body: some View {
VStack {
DatePicker("Select Time", selection: $time)
Picker("Select Fruit", selection: $fruit) {
ForEach(fruits, id: \.self) { Text($0) }
}
}
}
} misses displayedComponents for time.
Final Answer:
The code using selection-first initializers with label closures -> Option A
Quick Check:
Use bindings with $ and label closures for both controls [OK]
Hint: Use $ for bindings and label closures for Picker and DatePicker [OK]
Common Mistakes:
Omitting $ in bindings
Missing label closures
Not specifying displayedComponents for time
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.