I needed to have a popup pickerView inside an AlertController (controlling an NSTimer) with Cancel/Start buttons. It's stylable too.
I've plucked out all the timer stuff, here's the basic picker code, Hope it helps someone.
ps the full monty pops up a picker which sets a timer at the selected picker value and plays a tune when timer completes. Can post it if needed.
It provides a timer/alarm for a cookbook.
let pickerSet = ["5","10","15","20","30","35","40","45","50","55","60", "65", "70", "75", "80", "85", "90"]
func showPickerInActionSheet() {
let message = "\n\n\n\n\n\n\n\n"
let alert = UIAlertController(title: "", message: message, preferredStyle: UIAlertControllerStyle.Alert)
alert.modalInPopover = true
let attributedString = NSAttributedString(string: "Set Timer Minutes", attributes: [
NSFontAttributeName : UIFont.systemFontOfSize(20), //your font here,
NSForegroundColorAttributeName : UIColor(red:0.29, green:0.45, blue:0.74, alpha:1.0) ])
alert.setValue(attributedString, forKey: "attributedTitle")
//Create a frame (placeholder/wrapper) for the picker and then create the picker
let pickerFrame: CGRect = CGRectMake(35, 52, 200, 140) // CGRectMake(left, top, width, height) - left and top are like margins
let picker: UIPickerView = UIPickerView(frame: pickerFrame)
picker.backgroundColor = UIColor(red:0.29, green:0.45, blue:0.74, alpha:1.0)
//set the pickers datasource and delegate
picker.delegate = self
picker.dataSource = self
//Add the picker to the alert controller
alert.view.addSubview(picker)
let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
alert.addAction(cancelAction)
let okAction = UIAlertAction(title: "Start", style: .Default, handler: {
(alert: UIAlertAction!) -> Void in self.doSomethingWithValue(Int(self.pickerSet[picker.selectedRowInComponent(0)])!) })
alert.addAction(okAction)
viewController.presentViewController(alert, animated: true, completion: nil)
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { return 1 }
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return pickerSet.count }
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { return pickerSet[row] }
func pickerView(pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
let titleData = pickerSet[row]
let myTitle = NSAttributedString(string: titleData, attributes: [NSFontAttributeName:UIFont(name: "Verdana", size: 15.0)!,NSForegroundColorAttributeName:UIColor.whiteColor()])
return myTitle
}
func doSomethingWithValue(value: Int) {
self.selection = value
}