I'm building a "Date" UiPickerView
to be able to customize the font size, type and color.
Please see my code.
{
@IBOutlet weak var dataInicio: UIPickerView!
var dataDia1: NSMutableArray!
var dataMes1: NSArray!
var dataAno1: NSMutableArray!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.dataDia1 = NSMutableArray()
for dia in 1...31
{
dataDia1.addObject("\(dia)")
}
self.dataMes1 = NSArray(objects: "Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro")
self.dataAno1 = NSMutableArray()
for ano in 1970...2016
{
dataAno1.addObject("\(ano)")
}
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int
{
return 3
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
{
if (component == 0)
{
return dataDia1.count
}
if (component == 1)
{
return dataMes1.count
}
else
{
return dataAno1.count
}
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
{
var componentStr = dataDia1[row]
if(component == 0)
{
return componentStr as? String
}
if(component == 1)
{
componentStr = (dataMes1[row] as? String)!
return componentStr as? String
}
else
{
componentStr = (dataAno1[row] as? String)!
return componentStr as? String
}
}
}
It's building successful, but when I scroll down the year, it crashes when there are more than 27 components inside the array.
I'm initiating this and I have already looked around the web and didn't find nothing. :(
What am I doing wrong?
You call var componentStr = dataDia1[row]
regardless of which component is being asked for. Change your code to this:
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
{
if(component == 0)
{
var componentStr = dataDia1[row]
return componentStr as? String
}
else if(component == 1)
{
var componentStr = (dataMes1[row] as? String)!
return componentStr as? String
}
else
{
var componentStr = (dataAno1[row] as? String)!
return componentStr as? String
}
}
Also note the use of else if
.