I'm really new to programming/coding (i.e. I've never done it before until this weekend) and I've got stuck. I've been following loads of tutorials on youtube and stuff and I'm convinced I've done everything right however my picker wheels are showing "?" instead of the correct value except when one of the "?" are selected, the correct text is shown in the text field. Can anyone spot my mistake?
I've looked on this forum loads as well but again, as far as I'm aware, everything I've done is right.
P.s. I can't embed pictures at the moment because I'm so new
TextField returning correct data
Corresponding data selected on PickerView displayed as a "?"
import UIKit
class ProfileCreator: UIViewController, UIPickerViewDelegate, UITextFieldDelegate, UIPickerViewDataSource {
// -------------------------------------------------------------------------------------- //
// DOB Selector From Text Field Start 1 //
@IBOutlet weak var DOBSelectorTextField: UITextField!
func textFieldDidBeginEditing(textField: UITextField) {
let datepicker = UIDatePicker()
textField.inputView = datepicker
datepicker.datePickerMode = UIDatePickerMode.Date
datepicker.addTarget(self, action: "datepickerchanged:", forControlEvents: .ValueChanged)
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
func datepickerchanged(sender: UIDatePicker) {
let formatter = NSDateFormatter()
formatter.dateFormat = "dd MMMM yyyy"
DOBSelectorTextField.text = formatter.stringFromDate(sender.date)
}
// DOB Selector From Text Field End 1 //
// -------------------------------------------------------------------------------------- //
// Gender Selector From Text Field Start 1 //
@IBOutlet weak var GenderSelectorTextField: UITextField!
var GenderSelectorData = ["Male", "Female"]
var GenderSelectorPicker = UIPickerView()
// Gender Selector From Text Field End 1 //
// -------------------------------------------------------------------------------------- //
// Height Whole Number Text Field Start 1 //
@IBOutlet weak var HeightWholeNumberTextField: UITextField!
// Height Whole Number Text Field Start 1 //
// -------------------------------------------------------------------------------------- //
// Height Whole Number Unit Selector Text Field Start 1 //
@IBOutlet weak var HeightWholeNumberUnitSelectorTextField: UITextField!
var HeightWholeNumberUnitSelectorData = ["m", "ft"]
var HeightWholeNumberUnitSelectorPicker = UIPickerView()
// Height Whole Number Unit Selector Text Field Start 1 //
// -------------------------------------------------------------------------------------- //
// Height Decimal Number Text Field Start 1 //
@IBOutlet weak var HeightDecimalTextField: UITextField!
// Height Decimal Number Text Field End 1 //
// -------------------------------------------------------------------------------------- //
// Height Decimal Number Unit Selector Text Field Start 1 //
@IBOutlet weak var HeightDecimalNumberUnitSelectorTextField: UITextField!
var HeightDecimalNumberUnitSelectorData = ["cm", "inch"]
var HeightDecimalNumberUnitSelectorPicker = UIPickerView()
// Height Decimal Number Unit Selector Text Field End 1 //
// -------------------------------------------------------------------------------------- //
// Current Weight Whole Number Text Field Start 1 //
@IBOutlet weak var CurrentWeightWholeNumberTextField: UITextField!
// Current Weight Whole Number Text Field Start 1 //
// -------------------------------------------------------------------------------------- //
// Current Weight Whole Number Unit Selector Text Field Start 1 //
@IBOutlet weak var CurrentWeightWholeNumberUnitSelectorTextField: UITextField!
var CurrentWeightWholeNumberUnitSelectorData = ["kg", "lb"]
var CurrentWeightWholeNumberUnitSelectorPicker = UIPickerView()
// Current Weight Whole Number Unit Selector Text Field Start 1 //
// -------------------------------------------------------------------------------------- //
// Current Weight Decimal Number Text Field Start 1 //
@IBOutlet weak var CurrentWeightDecimalNumberTextField: UITextField!
// Current Weight Decimal Number Text Field End 1 //
// -------------------------------------------------------------------------------------- //
// Current Weight Decimal Number Unit Selector Text Field Start 1 //
@IBOutlet weak var CurrentWeightDecimalNumberUnitSelectorTextField: UITextField!
var CurrentWeightDecimalNumberUnitSelectorData = ["g", "oz"]
var CurrentWeightDecimalNumberUnitSelectorPicker = UIPickerView()
// Current Weight Decimal Number Unit Selector Text Field End 1 //
// -------------------------------------------------------------------------------------- //
// Close keyboard start //
func closekeyboard() {
self.view.endEditing(true)
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
closekeyboard()
}
// Close keyboard end //
// -------------------------------------------------------------------------------------- //
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// -------------------------------------------------------------------------------------- //
// DOB Selector From Text Field Start 2 //
DOBSelectorTextField.delegate = self
// DOB Selector From Text Field End 2 //
// -------------------------------------------------------------------------------------- //
// Gender Selector From Text Field Start 2 //
GenderSelectorPicker.delegate = self
GenderSelectorPicker.dataSource = self
GenderSelectorTextField.inputView = GenderSelectorPicker
// Gender Selector From Text Field End 2 //
// -------------------------------------------------------------------------------------- //
// Height Whole Number Unit Selector Text Field Start 2 //
HeightWholeNumberUnitSelectorPicker.delegate = self
HeightWholeNumberUnitSelectorPicker.dataSource = self
HeightWholeNumberUnitSelectorTextField.inputView = HeightWholeNumberUnitSelectorPicker
// Height Whole Number Unit Selector Text Field End 2 //
// -------------------------------------------------------------------------------------- //
// Height Decimal Unit Selector Text Field Start 1 //
HeightDecimalNumberUnitSelectorPicker.delegate = self
HeightDecimalNumberUnitSelectorPicker.dataSource = self
HeightDecimalNumberUnitSelectorTextField.inputView = HeightDecimalNumberUnitSelectorPicker
// Height Decimal Unit Selector Text Field End 1 //
// -------------------------------------------------------------------------------------- //
// Current Weight Whole Number Unit Selector Text Field Start 2 //
CurrentWeightWholeNumberUnitSelectorPicker.delegate = self
CurrentWeightWholeNumberUnitSelectorPicker.dataSource = self
CurrentWeightWholeNumberUnitSelectorTextField.inputView = CurrentWeightWholeNumberUnitSelectorPicker
// Current Weight Whole Number Unit Selector Text Field End 2 //
// -------------------------------------------------------------------------------------- //
// Current Weight Decimal Unit Selector Text Field Start 1 //
CurrentWeightDecimalNumberUnitSelectorPicker.delegate = self
CurrentWeightDecimalNumberUnitSelectorPicker.dataSource = self
CurrentWeightDecimalNumberUnitSelectorTextField.inputView = CurrentWeightDecimalNumberUnitSelectorPicker
// Current Weight Decimal Unit Selector Text Field End 1 //
// -------------------------------------------------------------------------------------- //
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// -------------------------------------------------------------------------------------- //
// Selectors Start 1 //
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if pickerView == GenderSelectorPicker {
return GenderSelectorData.count
} else if pickerView == HeightWholeNumberUnitSelectorPicker {
return HeightWholeNumberUnitSelectorData.count
} else if pickerView == HeightDecimalNumberUnitSelectorPicker {
return HeightDecimalNumberUnitSelectorData.count
} else if pickerView == CurrentWeightWholeNumberUnitSelectorPicker {
return CurrentWeightWholeNumberUnitSelectorData.count
} else if pickerView == CurrentWeightDecimalNumberUnitSelectorPicker {
return CurrentWeightDecimalNumberUnitSelectorData.count
}
return 1
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent comonent: Int) {
if pickerView == GenderSelectorPicker {
GenderSelectorTextField.text = GenderSelectorData[row]
} else if pickerView == HeightWholeNumberUnitSelectorPicker {
HeightWholeNumberUnitSelectorTextField.text = HeightWholeNumberUnitSelectorData[row]
} else if pickerView == HeightDecimalNumberUnitSelectorPicker {
HeightDecimalNumberUnitSelectorTextField.text = HeightDecimalNumberUnitSelectorData[row]
} else if pickerView == CurrentWeightWholeNumberUnitSelectorPicker {
CurrentWeightWholeNumberUnitSelectorTextField.text = CurrentWeightWholeNumberUnitSelectorData[row]
} else if pickerView == CurrentWeightDecimalNumberUnitSelectorPicker {
CurrentWeightDecimalNumberUnitSelectorTextField.text = CurrentWeightDecimalNumberUnitSelectorData[row]
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if pickerView == GenderSelectorPicker {
return GenderSelectorData[row]
} else if pickerView == HeightWholeNumberUnitSelectorPicker {
return HeightWholeNumberUnitSelectorData[row]
} else if pickerView == HeightDecimalNumberUnitSelectorPicker {
return HeightDecimalNumberUnitSelectorData[row]
} else if pickerView == CurrentWeightWholeNumberUnitSelectorPicker {
return CurrentWeightWholeNumberUnitSelectorData[row]
} else if pickerView == CurrentWeightDecimalNumberUnitSelectorPicker {
return CurrentWeightDecimalNumberUnitSelectorData[row]
}
return ""
}
}
// Selectors End 1
}
After asking a friend of mine about the problem, this is the solution he came up with to resolve the problem I was having.
TextField returning correct data
PickerView now returning correct data
P.s. I've added a few more pickers so the code does have a little extra compared to when I first posted the original question/problem.
I hope this helps someone else
import UIKit
class ProfileCreator: UIViewController, UIPickerViewDelegate, UITextFieldDelegate, UIPickerViewDataSource {
var output: Int = 0
var output2: Int = 0
// -------------------------------------------------------------------------------------- //
// DOB Selector From Text Field Start 1 //
@IBOutlet weak var DOBSelectorTextField: UITextField!
func textFieldDidBeginEditing(textField: UITextField) {
let datepicker = UIDatePicker()
textField.inputView = datepicker
datepicker.datePickerMode = UIDatePickerMode.Date
datepicker.addTarget(self, action: "datepickerchanged:", forControlEvents: .ValueChanged)
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
func datepickerchanged(sender: UIDatePicker) {
let formatter = NSDateFormatter()
formatter.dateFormat = "dd MMMM yyyy"
DOBSelectorTextField.text = formatter.stringFromDate(sender.date)
}
// DOB Selector From Text Field End 1 //
// -------------------------------------------------------------------------------------- //
// Gender Selector From Text Field Start 1 //
@IBOutlet weak var GenderSelectorTextField: UITextField!
var GenderSelectorData = ["Male", "Female"]
var GenderSelectorPicker = UIPickerView()
// Gender Selector From Text Field End 1 //
// -------------------------------------------------------------------------------------- //
// Height Whole Number Text Field Start 1 //
@IBOutlet weak var HeightWholeNumberTextField: UITextField!
// Height Whole Number Text Field Start 1 //
// -------------------------------------------------------------------------------------- //
// Height Whole Number Unit Selector Text Field Start 1 //
@IBOutlet weak var HeightWholeNumberUnitSelectorTextField: UITextField!
var HeightWholeNumberUnitSelectorData = ["m", "ft"]
var HeightWholeNumberUnitSelectorPicker = UIPickerView()
// Height Whole Number Unit Selector Text Field Start 1 //
// -------------------------------------------------------------------------------------- //
// Height Decimal Number Text Field Start 1 //
@IBOutlet weak var HeightDecimalTextField: UITextField!
// Height Decimal Number Text Field End 1 //
// -------------------------------------------------------------------------------------- //
// Height Decimal Number Unit Selector Text Field Start 1 //
@IBOutlet weak var HeightDecimalNumberUnitSelectorTextField: UITextField!
var HeightDecimalNumberUnitSelectorData = ["cm", "inch"]
var HeightDecimalNumberUnitSelectorPicker = UIPickerView()
// Height Decimal Number Unit Selector Text Field End 1 //
// -------------------------------------------------------------------------------------- //
// Current Weight Whole Number Text Field Start 1 //
@IBOutlet weak var CurrentWeightWholeNumberTextField: UITextField!
// Current Weight Whole Number Text Field Start 1 //
// -------------------------------------------------------------------------------------- //
// Current Weight Whole Number Unit Selector Text Field Start 1 //
@IBOutlet weak var CurrentWeightWholeNumberUnitSelectorTextField: UITextField!
var CurrentWeightWholeNumberUnitSelectorData = ["kg", "lb"]
var CurrentWeightWholeNumberUnitSelectorPicker = UIPickerView()
// Current Weight Whole Number Unit Selector Text Field Start 1 //
// -------------------------------------------------------------------------------------- //
// Current Weight Decimal Number Text Field Start 1 //
@IBOutlet weak var CurrentWeightDecimalNumberTextField: UITextField!
// Current Weight Decimal Number Text Field End 1 //
// -------------------------------------------------------------------------------------- //
// Current Weight Decimal Number Unit Selector Text Field Start 1 //
@IBOutlet weak var CurrentWeightDecimalNumberUnitSelectorTextField: UITextField!
var CurrentWeightDecimalNumberUnitSelectorData = ["g", "oz"]
var CurrentWeightDecimalNumberUnitSelectorPicker = UIPickerView()
// Current Weight Decimal Number Unit Selector Text Field End 1 //
// -------------------------------------------------------------------------------------- //
// Current Fitness Goal Selector Text Field Start 1 //
@IBOutlet weak var CurrentFitnessGoalSelectorTextField: UITextField!
var CurrentFitnessGoalSelectorData = ["Lose Fat", "Gain Muscle", "Maintain Physique"]
var CurrentFitnessGoalSelectorPicker = UIPickerView()
// Current Fitness Goal Selector Text Field End 1 //
// -------------------------------------------------------------------------------------- //
// Weekly Activity Level Text Field Start 1 //
@IBOutlet weak var WeeklyActivityLevelTextField: UITextField!
var WeeklyActivityLevelTextFieldData = ["I am sedentary (little or no exercise)", "I am lightly active (light exercise/sports 1-3 days per week)", "I am moderately active (moderate exercise/sports 3-5 days per week)", "I am very active (hard exercise/sports 6-7 days a week)", "I am extra active (very hard exercise/sports & physical job or 2 x training"]
var WeeklyActivityLevelSelectorPicker = UIPickerView()
// Weekly Activity Level Text Field End 1 //
// Close keyboard start //
func closekeyboard() {
self.view.endEditing(true)
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
closekeyboard()
}
// Close keyboard end //
// -------------------------------------------------------------------------------------- //
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// -------------------------------------------------------------------------------------- //
// DOB Selector From Text Field Start 2 //
DOBSelectorTextField.delegate = self
// DOB Selector From Text Field End 2 //
// -------------------------------------------------------------------------------------- //
// Gender Selector From Text Field Start 2 //
GenderSelectorPicker.delegate = self
GenderSelectorPicker.dataSource = self
GenderSelectorTextField.inputView = GenderSelectorPicker
// Gender Selector From Text Field End 2 //
// -------------------------------------------------------------------------------------- //
// Height Whole Number Unit Selector Text Field Start 2 //
HeightWholeNumberUnitSelectorPicker.delegate = self
HeightWholeNumberUnitSelectorPicker.dataSource = self
HeightWholeNumberUnitSelectorTextField.inputView = HeightWholeNumberUnitSelectorPicker
// Height Whole Number Unit Selector Text Field End 2 //
// -------------------------------------------------------------------------------------- //
// Height Decimal Unit Selector Text Field Start 2 //
HeightDecimalNumberUnitSelectorPicker.delegate = self
HeightDecimalNumberUnitSelectorPicker.dataSource = self
HeightDecimalNumberUnitSelectorTextField.inputView = HeightDecimalNumberUnitSelectorPicker
// Height Decimal Unit Selector Text Field End 2 //
// -------------------------------------------------------------------------------------- //
// Current Weight Whole Number Unit Selector Text Field Start 2 //
CurrentWeightWholeNumberUnitSelectorPicker.delegate = self
CurrentWeightWholeNumberUnitSelectorPicker.dataSource = self
CurrentWeightWholeNumberUnitSelectorTextField.inputView = CurrentWeightWholeNumberUnitSelectorPicker
// Current Weight Whole Number Unit Selector Text Field End 2 //
// -------------------------------------------------------------------------------------- //
// Current Weight Decimal Unit Selector Text Field Start 2 //
CurrentWeightDecimalNumberUnitSelectorPicker.delegate = self
CurrentWeightDecimalNumberUnitSelectorPicker.dataSource = self
CurrentWeightDecimalNumberUnitSelectorTextField.inputView = CurrentWeightDecimalNumberUnitSelectorPicker
// Current Weight Decimal Unit Selector Text Field End 2 //
// -------------------------------------------------------------------------------------- //
// Current Fitness Goal Selector Text Field Start 2 //
CurrentFitnessGoalSelectorPicker.delegate = self
CurrentFitnessGoalSelectorPicker.dataSource = self
CurrentFitnessGoalSelectorTextField.inputView = CurrentFitnessGoalSelectorPicker
// Current Fitness Goal Selector Text Field End 2 //
// -------------------------------------------------------------------------------------- //
// Weekly Activity Level Selector Text Field Start 2 //
WeeklyActivityLevelSelectorPicker.delegate = self
WeeklyActivityLevelSelectorPicker.dataSource = self
WeeklyActivityLevelTextField.inputView = WeeklyActivityLevelSelectorPicker
// Weekly Activity Level Selector Text Field End 2 //
// -------------------------------------------------------------------------------------- //
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// -------------------------------------------------------------------------------------- //
// Selectors Start 1 //
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if pickerView == GenderSelectorPicker {
output = 1
} else if pickerView == HeightWholeNumberUnitSelectorPicker {
output = 2
} else if pickerView == HeightDecimalNumberUnitSelectorPicker {
output = 3
} else if pickerView == CurrentWeightWholeNumberUnitSelectorPicker {
output = 4
} else if pickerView == CurrentWeightDecimalNumberUnitSelectorPicker {
output = 5
} else if pickerView == CurrentFitnessGoalSelectorPicker { output = 6
} else if pickerView == WeeklyActivityLevelSelectorPicker {
output = 7
}
switch output{
case 1:
return GenderSelectorData.count
case 2:
return HeightWholeNumberUnitSelectorData.count
case 3:
return HeightDecimalNumberUnitSelectorData.count
case 4:
return CurrentWeightWholeNumberUnitSelectorData.count
case 5:
return CurrentWeightDecimalNumberUnitSelectorData.count
case 6:
return CurrentFitnessGoalSelectorData.count
case 7:
return WeeklyActivityLevelTextFieldData.count
default:
return 1
}
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if pickerView == GenderSelectorPicker {
output2 = 1
} else if pickerView == HeightWholeNumberUnitSelectorPicker {
output2 = 2
} else if pickerView == HeightDecimalNumberUnitSelectorPicker {
output2 = 3
} else if pickerView == CurrentWeightWholeNumberUnitSelectorPicker {
output2 = 4
} else if pickerView == CurrentWeightDecimalNumberUnitSelectorPicker {
output2 = 5
} else if pickerView == CurrentFitnessGoalSelectorPicker {
output2 = 6
} else if pickerView == WeeklyActivityLevelSelectorPicker {
output2 = 7
}
switch output2{
case 1:
return GenderSelectorData[row]
case 2:
return HeightWholeNumberUnitSelectorData[row]
case 3:
return HeightDecimalNumberUnitSelectorData[row]
case 4:
return CurrentWeightWholeNumberUnitSelectorData[row]
case 5:
return CurrentWeightDecimalNumberUnitSelectorData[row]
case 6:
return CurrentFitnessGoalSelectorData[row]
case 7:
return WeeklyActivityLevelTextFieldData[row]
default:
return ""
}
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent comonent: Int) {
if pickerView == GenderSelectorPicker {
GenderSelectorTextField.text = GenderSelectorData[row]
} else if pickerView == HeightWholeNumberUnitSelectorPicker {
HeightWholeNumberUnitSelectorTextField.text = HeightWholeNumberUnitSelectorData[row]
} else if pickerView == HeightDecimalNumberUnitSelectorPicker {
HeightDecimalNumberUnitSelectorTextField.text = HeightDecimalNumberUnitSelectorData[row]
} else if pickerView == CurrentWeightWholeNumberUnitSelectorPicker {
CurrentWeightWholeNumberUnitSelectorTextField.text = CurrentWeightWholeNumberUnitSelectorData[row]
} else if pickerView == CurrentWeightDecimalNumberUnitSelectorPicker {
CurrentWeightDecimalNumberUnitSelectorTextField.text = CurrentWeightDecimalNumberUnitSelectorData[row]
} else if pickerView == CurrentFitnessGoalSelectorPicker {
CurrentFitnessGoalSelectorTextField.text = CurrentFitnessGoalSelectorData[row]
} else if pickerView == WeeklyActivityLevelSelectorPicker {
WeeklyActivityLevelTextField.text = WeeklyActivityLevelTextFieldData[row]
}
}
}