When I use titleForRow, my UIPickerView works ok.
But when I removed titleForRow and added viewForRow to have it show multiple lines, the viewForRow fires for each row but doesn't display rows.
THE CODE..............................
class CentralViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource
func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
return 80.0
}
func open_mode_UIPickerView()
{
oximeter_mode_UIPickerView = UIPickerView()
oximeter_mode_UIPickerView.delegate = self
oximeter_mode_UIPickerView.dataSource = self
oximeter_mode_UIPickerView.backgroundColor = UIColor.white
oximeter_mode_UIPickerView.setValue(UIColor.black, forKey: "textColor")
oximeter_mode_UIPickerView.autoresizingMask = .flexibleWidth
oximeter_mode_UIPickerView.contentMode = .center
mode_UIPickerView_x = 0
mode_UIPickerView_y = 10
mode_UIPickerView_width = Int( UIScreen.main.bounds.size.width / 3 )
mode_UIPickerView_height = 300
oximeter_mode_UIPickerView.frame = CGRect.init( x: mode_UIPickerView_x,
y: mode_UIPickerView_y,
width: mode_UIPickerView_width,
height: mode_UIPickerView_height)
self.view.addSubview( oximeter_mode_UIPickerView )
view.bringSubviewToFront( oximeter_mode_UIPickerView )
}
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView
{
let label: UILabel
if let view = view {
label = view as! UILabel
}
else {
label = UILabel(frame: CGRect( x: mode_UIPickerView_x,
y: mode_UIPickerView_y,
width: mode_UIPickerView_width,
height: mode_UIPickerView_height ))
}
label.text = ""
label.lineBreakMode = .byWordWrapping
label.numberOfLines = 0
// Use viewForRow, to support multiline
if row == 0
{
label.text = "Oxi mode 0"
+ "\n Red Red"
+ "\n 620 660"
print("titleForRow label.text", label.text ) ///////// THIS PRINTS OK
}
if row == 1
{
label.text = "Oxi mode 1"
+ "\n Orange Red"
+ "\n 590 730"
print("titleForRow label.text", label.text ) ///////// THIS PRINTS OK
}
if row == 2
{
label.text = "Oxi mode 2"
+ "\n Violet IR"
+ "\n 420 830"
print("titleForRow label.text", label.text ) ///////// THIS PRINTS OK
}
if row == 3
{
label.text = "Oxi mode 3"
+ "\n Green IR"
+ "\n 520 940"
print("titleForRow label.text", label.text ) ///////// THIS PRINTS OK
}
label.sizeToFit()
return label
}
BREAKPOINT AT END OF titleForRow......................
<UILabel: 0x104e20dd0; frame = (0 10; 87.3333 61); text = 'Oxi mode 0 Red Red 6...'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x281d830c0>>
PROBLEM...
let label <<<<<<<<<<< ERROR. NEEDED TO BE CLASS LEVEL, NOT FUNC LEVEL
ie. var label: UILabel! ...at class level.