Как указывает lechec, просто установите для свойства inputView объекта UITextField значение UIPickerView. Это очень легко сделать.
В этом посте подробно рассказывается о том, как это сделать: http://nomtek.com/tips-for-developers/working-with-pickers/, и имеется проект для загрузки с примером кода. Проект открывается нормально в XCode 4.2 и компилируется для iOS 5.
Кроме того, я не хотел вставлять кнопку, чтобы скрыть это. Следующий код позволяет пользователю коснуться любого места в представлении, вне UITextField, и оставить его в качестве первого респондента, в результате чего он «теряет фокус». На самом деле код для обработки жеста касания приводит к тому, что любой UITextField «теряет фокус», тем самым скрывая любой inputView или клавиатуру.
-(void)handleViewTapGesture:(UITapGestureRecognizer *)gesture
{
[self endEditing:YES];
}
Это реализовано в ViewController. Обработчик добавляется как распознаватель жестов к соответствующему представлению в установщике свойства представления:
-(void) setLoginView:(LoginView *)loginView
{
_loginView = loginView;
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self.loginView action:@selector(handleTapGesture:)];
[tapRecognizer setDelegate:self]; // self implements the UIGestureRecognizerDelegate protocol
[self.loginView addGestureRecognizer:tapRecognizer];
}
Обработчик также может быть определен в представлении. Если вы не знакомы с обработкой жестов, см. Документы Apple и / или тонны образцов в других местах.
Я должен упомянуть, что вам понадобится некоторый дополнительный код, чтобы убедиться, что другие элементы управления получают ответвления, вам нужен делегат, реализующий протокол UIGestureRecognizerDelegate, и этот метод:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if ([touch.view isKindOfClass:[UIButton class]]) // Customize appropriately.
return NO; // Don't let the custom gestureRecognizer handle the touch
return YES;
}