正如 lechec 指出的,只需将 UITextField 的 inputView 属性设置为 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 中实现的。该处理程序作为手势识别器添加到 View 属性的 setter 中的适当 View:
-(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;
}