Para obter uma alternativa que lida com UIPickerView e Action Sheets, confira ActionSheetPicker
https://github.com/TimCinel/ActionSheetPicker
São cocoapods habilitados. Ele lida com todos os botões de cancelar e concluir na Folha de Ação. Os exemplos dentro do projeto de amostra são ótimos. Eu escolhi o ActionSheetStringPicker, que lida facilmente apenas com opções baseadas em String, mas a API pode lidar com quase tudo que eu posso pensar.
Eu originalmente comecei uma solução muito parecida com a resposta marcada, mas tropecei neste projeto e levei cerca de 20 minutos para integrar as coisas ao meu aplicativo para uso, incluindo o uso de cocopods: ActionSheetPicker (~> 0.0)
Espero que isto ajude.
Baixe o projeto git e observe as seguintes classes:
- ActionSheetPickerViewController.m
- ActionSheetPickerCustomPickerDelegate.h
Aqui está aproximadamente a maior parte do código que adicionei, mais as importações * .h.
- (IBAction)gymTouched:(id)sender {
NSLog(@"gym touched");
[ActionSheetStringPicker showPickerWithTitle:@"Select a Gym" rows:self.locations initialSelection:self.selectedIndex target:self successAction:@selector(gymWasSelected:element:) cancelAction:@selector(actionPickerCancelled:) origin:sender];
}
- (void)actionPickerCancelled:(id)sender {
NSLog(@"Delegate has been informed that ActionSheetPicker was cancelled");
}
- (void)gymWasSelected:(NSNumber *)selectedIndex element:(id)element {
self.selectedIndex = [selectedIndex intValue];
//may have originated from textField or barButtonItem, use an IBOutlet instead of element
self.txtGym.text = [self.locations objectAtIndex:self.selectedIndex];
}
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
return NO; // Hide both keyboard and blinking cursor.
}