Search code examples
arraysswiftdictionaryrangewatchkit

WKPickerItems and ranges


I am trying to make a picker view in Watch Kit from -273 to 273. Sadly Watch Kit only allows a string as title so I converted my range using .map Now when I run the App it display a range from 0 to 546, but will not go into the negative range I tried changing both values but the picker always starts at 0 and won't go back further.

I isolated the problem into these lines:

let pickerItems: [WKPickerItem] = (-273...273).map {
        let pickerItem = WKPickerItem()
        pickerItem.title = "\($0)"
        return pickerItem
    }

Solution

  • I just tried it out and your code does show negative values in the picker. Then when the user picks a value you have to take the value and use it to retrieve the "real" value from your pickerItems array:

    class InterfaceController: WKInterfaceController {
    
        @IBOutlet var picker: WKInterfacePicker!
        var pickerItems: [WKPickerItem]?
    
        override func awakeWithContext(context: AnyObject?) {
            super.awakeWithContext(context)
    
            pickerItems = (-273...273).map {
                let pickerItem = WKPickerItem()
                pickerItem.title = "\($0)"
                return pickerItem
            }
            picker.setItems(pickerItems)
        }
    
        @IBAction func pickerDidChange(value: Int) {
            let pickedItem = pickerItems![value] // value = 0..576
            if let pickedValue = Int(pickedItem.title!) {
                print(pickedValue) // -273..273
            }
    
        }
    }
    

    enter image description here